0

私は PHP をよく知らないので、メールを送信するための非常に単純な PHP スクリプトを取得しようとしています。送信をクリックすると、お礼のメッセージは届きますが、メールは届きません。

<?php $name = $_POST['name'];
$email = $_POST['email'];
$web = $_POST['web'];
$message = $_POST['message'];
$formcontent="From: $name \n Website: $web \n Message: $message";
$recipient = "myemail@example.com"; // I do have my email here
$subject = "Contact Form";
$mailheader = "From: $email \r\n";
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!");
echo "Thank You!";
    ?>

ここにフォームhtmlがあります:

<form action="mail.php" method="post" class="form">  

    <p class="name">  
      <label for="name">Name</label>
        <input type="text" name="name" id="name" />  

    </p>  

    <p class="email">  
      <label for="email">E-mail</label> 
        <input type="text" name="email" id="email" />  

    </p>  

    <p class="web">  
      <label for="web">Website</label> 
        <input type="text" name="web" id="web" />  

    </p>  

    <p class="text">  
      <label for="web">Comments</label> 
        <textarea name="message"></textarea>  
    </p>  

    <p class="submit">  
        <input type="submit" value="Send" />  
    </p>        
</form> 
4

4 に答える 4

2

うーん...よさそうですね。試す:

mail('youremail@hotmail.com', 'aSubject', 'aMessage');

すべての引数変数ではなく、一重引用符付きの実際の文字列です。

5 分以内に通常の迷惑メールに表示されるはずです。


それでもうまくいかない場合は、スクリプトが実行されていないことを意味するため、mail.php を次のように変更します。

echo 'hi';

スクリプト パスが正しいことを確認します。それは何が悪いのかを見つけるでしょう、乾杯。

于 2013-03-29T01:38:54.527 に答える
1

これには PHPMAILER クラスを簡単に使用することをお勧めします。そうすれば、少し休むことができます。

https://code.google.com/a/apache-extras.org/p/phpmailer/

これは、他の作業に時間を浪費する多くのコードの編集に煩わされる必要がなくなるため、非常に役立ちます。

SMTP の例については、examples フォルダーにあるファイルを確認し、SMTP の高度なまたは基本的ないずれかを使用します。SMTP の高度な機能を使用すると、エラーをスローしてキャッチすることができます。これにより、すべてのエラーが解決されるまで、どこにエラーがあるかを知ることができます。SMTP 基本コードについては、サンプル コードを参照してください。

require_once('../class.phpmailer.php');
//include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded

$mail             = new PHPMailer();

$body             = file_get_contents('contents.html');
$body             = preg_replace('/[\]/','',$body);

$mail->IsSMTP(); // telling the class to use SMTP
$mail->Host       = "mail.yourdomain.com"; // SMTP server
$mail->SMTPDebug  = 2;                     // enables SMTP debug information (for testing)
                                           // 1 = errors and messages
                                           // 2 = messages only
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->Host       = "mail.yourdomain.com"; // sets the SMTP server
$mail->Port       = 26;                    // set the SMTP port for the GMAIL server
$mail->Username   = "yourname@yourdomain"; // SMTP account username
$mail->Password   = "yourpassword";        // SMTP account password

$mail->SetFrom('name@yourdomain.com', 'First Last');

$mail->AddReplyTo("name@yourdomain.com","First Last");

$mail->Subject    = "PHPMailer Test Subject via smtp, basic with authentication";

$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test

$mail->MsgHTML($body);

$address = "whoto@otherdomain.com";
$mail->AddAddress($address, "John Doe");

$mail->AddAttachment("images/phpmailer.gif");      // attachment
$mail->AddAttachment("images/phpmailer_mini.gif"); // attachment

if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Message sent!";
}

テストが完了し、SMTP バッファ メッセージの出力を停止したい場合は、次の行を探します。

$mail->SMTPDebug = 2;

そしてそれを

$mail->SMTPDebug = false;
$mail->do_debug = 0;

その後、あなたは行ってもいいです。必要に応じて質問してください。

于 2013-03-30T02:43:45.933 に答える
0

まず、コードが POST を使用したヘッダー インジェクションの影響を受けることに注意してください。$email 値が無害であることを確認するには、filter_var() ( http://php.net/manual/fr/function.filter-var.php ) を使用する必要があります。

次に、PHP がメールを送信できない理由がいくつかあります。

mail() 関数はサーバーの MTA (sendmail、postfix など) を使用します。メールを送信するには、適切にインストール/構成する必要があります。

ISP も 25 ポートをブロックしている可能性があります (スパムを防ぐため)。

または、php pear の Mail および Net_SMTP クラスを使用して、SMTP 経由で電子メールを送信できます。これらのクラスは、エンコーディング、添付ファイルなどを便利な方法で処理します。

于 2013-03-29T01:40:44.707 に答える
0

私はバックエンドの開発者ではないので、php についてはよくわかりませんが、このコードはうまく機能したので、試してみてください。

<p><span>Name</span><input class="contact" type="text" name="your_name" value="" /></p>
            <p><span>Email Address</span><input class="contact" type="text" name="your_email" value="" /></p>
			<p><span>Message</span><textarea class="contact textarea" rows="8" cols="50" name="your_message"></textarea></p>
             
            <p style="padding-top: 15px"><span>&nbsp;</span><input class="submit" type="submit" name="contact_submitted" value="Send" /></p>
            <?php
            $your_name = $_POST['your_name'];
            $your_email = $_POST[your_email];
            $your_message = $_POST['your_message'];
            $recipient = "youremailhere@domain.com";
            $subject = "New Message About BikeExcel";
            
            mail($recipient , $subject, $your_message, "From " . $your_email);
            echo "Your Message Has Been Sent";
            ?>

したがって、電子メールをメール文字列に入れる代わりに、電子メールを定義する変数を作成します。これにより、コードの見栄えも良くなり、ポートフォリオで見栄えが良くなります. これがお役に立てば幸いです!!!!

于 2014-12-31T19:06:18.013 に答える