2011-01-08 18 views
3

これは私のコードです:PHPでメールが失敗するのはなぜですか?

<?php 
//define the receiver of the email 
$to = '[email protected]'; 
//define the subject of the email 
$subject = 'Test email'; 
//define the message to be sent. 
$message = "Hello World!\n\nThis is my mail."; 
//define the headers we want passed. 
$header = "From: [email protected]"; 
//send the email 
$mail_sent = @mail($to, $subject, $message); 
//if the message is sent successfully print "Mail sent". Otherwise print "Mail failed" 

echo $mail_sent ? "Mail sent" : "Mail failed"; 
?> 

- それはメールが

を失敗返し、これが失敗する可能性がいくつかの理由がありますが、私に

+4

削除'とがあれば教えてください:

あなたがメールを送信するために、リモートサーバーを使用していると仮定すると、コードは次のようになりますエラー/警告が表示されます。 –

+0

ウェブページはどこにホストされていますか? –

+0

(SMTP-)サーバーはメールを送信していますか?それは設定されていますか? –

答えて

10

を助けてください。原因を見つける主な障害は、mail()関数の呼び出しの前にエラー制御演算子(@)を使用することです。

その他の理由として、有効なFromヘッダーがないことが考えられます。 $ header変数に変数を定義しても、それをmail()関数に渡すことはありません。 Fromヘッダーは、メールを送信しているドメインの有効なメールアドレスであることも重要です。そうでない場合、ほとんどのホスティング会社は電子メールを迷惑メールとして拒否します。 mail()に5番目のパラメータを指定する必要があるかもしれません。通常は、-fの後に現在のドメイン上の有効な電子メールアドレスが続く文字列で構成されます。

あなた自身のコンピュータからこれを送信しようとしている可能性があります。 mail()関数はSMTP認証をサポートしていないため、ほとんどのメールサーバーは認識できないソースからのメールを拒否します。

あなたの問題にすべて追加するには、電子メール内の改行は改行と改行の組み合わせでなければなりません。 PHPでは、これは "\ n \ n"ではなく "\ r \ n"です。 `メールのフロント()`関数に `@

<?php 
//define the receiver of the email 
$to = '[email protected]'; 
//define the subject of the email 
$subject = 'Test email'; 
//define the message to be sent. 
$message = "Hello World!\r\nThis is my mail."; 
//define the headers we want passed. 
$header = "From: [email protected]"; // must be a genuine address 
//send the email 
$mail_sent = mail($to, $subject, $message, $header); 
//if the message is sent successfully print "Mail sent". Otherwise print "Mail failed" 

echo $mail_sent ? "Mail sent" : "Mail failed"; 
?> 
+1

ありがとうございました:) SMTPを設定する必要がありました –

関連する問題