2013-01-22 31 views
93
$from = "[email protected]"; 
$headers = "From:" . $from; 
echo mail ("[email protected]" ,"testmailfunction" , "Oj",$headers); 

PHPで電子メールを送信する際に問題があります。私はエラー:SMTP server response: 530 SMTP authentication is requiredを取得します。SMTPサーバーからPHPを使用した電子メールの送信

私はSMTPなしでメールを送信して確認できるという印象を受けました。私は、このメールが適切にフィルタリングされることを知っていますが、それは今は重要ではありません。

[mail function] 
; For Win32 only. 
; http://php.net/smtp 
SMTP = localhost 
; http://php.net/smtp-port 
smtp_port = 25 

; For Win32 only. 
; http://php.net/sendmail-from 
sendmail_from = [email protected] 

これはphp.iniファイルの設定です。 SMTPはどのようにセットアップすればよいですか?確認を必要としないSMTPサーバーがありますか、自分でサーバーをセットアップする必要がありますか?

答えて

10

認証なしで動作するSMTPサーバーがいくつかありますが、サーバーで認証が必要な場合は、それを回避する方法はありません。

PHPのビルトインメール機能は非常に限定されており、WIndowsでのみSMTPサーバーを指定することができます。 * nixでは、mail()はOSのバイナリを使用します。

ネット上の任意のSMTPサーバーに電子メールを送信する場合は、SwiftMailerのようなライブラリの使用を検討してください。これにより、たとえば、Google Mailの送信サーバなどを使用できます。

125

SMTP認証を必要とするサーバーを介して電子メールを送信する場合は、ホスト名、ユーザー名、およびパスワードを設定する必要があります(ポートがデフォルトのものでない場合は - 25) 。

は例えば、私は通常、このものに類似した設定でphpmailerのを使用します。

$mail = new PHPMailer(); 
$mail->IsSMTP(); 
$mail->CharSet = 'UTF-8'; 

$mail->Host  = "mail.example.com"; // SMTP server example 
$mail->SMTPDebug = 0;      // enables SMTP debug information (for testing) 
$mail->SMTPAuth = true;     // enable SMTP authentication 
$mail->Port  = 25;     // set the SMTP port for the GMAIL server 
$mail->Username = "username"; // SMTP account username example 
$mail->Password = "password";  // SMTP account password example 

あなたがここにphpmailerの詳細を見つけることができます。https://github.com/PHPMailer/PHPMailer

+17

1の下で、あなたのGmailアカウントでSMTPを有効にすることを忘れないでPHPの 'mail()'関数に代わるものです。 – SDC

+6

PHPMailerはWordPressにも組み込まれており、 '' phpmailer_init''アクションフックを使って設定できるという、この答えにつまづいている人にとっては注目に値することです。これは、WordPress for SMTPメールまたはAmazon SES(SMTP接続をサポートする)を設定する便利な方法です。 –

+0

それは最高の解決策です... –

36
<?php 
    ini_set("SMTP", "aspmx.l.google.com"); 
    ini_set("sendmail_from", "[email protected]"); 

    $message = "The mail message was sent with the following mail setting:\r\nSMTP = aspmx.l.google.com\r\nsmtp_port = 25\r\nsendmail_from = [email protected]"; 

    $headers = "From: [email protected]"; 


    mail("[email protected]", "Testing", $message, $headers); 
    echo "Check your email now....<BR/>"; 
?>

OR

READ ON

+0

メールを送信するために使用しているIPに550-5.7.1が弊社のサーバーに直接メールを送信する権限がありません。私はこのエラーが発生します。私が望むのは、開かれたメールリレーです。 –

+0

私の更新された答えを確認しました..? –

+0

https://support.google.com/mail/bin/answer.py?hl=ja&answer=81126#authentication –

34

Unixユーザの場合、mail()は実際にはSendmailコマンドを使用して電子メールを送信しています。アプリケーションを変更する代わりに、環境を変更することができます。 msmtpはSendmail互換のCLI構文を持つSMTPクライアントです。つまり、Sendmailの代わりに使用できます。 php.iniを少し変更するだけです。

sendmail_path = "/usr/bin/msmtp -C /path/to/your/config -t" 

さらに、lowly mail()関数でもSMTPの良さを利用できます。既存のアプリケーションをsendgridやmandrillのようなメールサービスにアプリケーションを変更せずに接続しようとすると便利です。

+1

すばらしい解決策、今、複数のサーバーでそれを使用してください! – raice

+3

メーリングリストを使用していないアプリのDockerコンテナでこれを実装する。 – Batandwa

12

問題は、PHP mail()関数の機能が非常に限られていることです。 PHPからメールを送信する方法はいくつかあります。

  1. mail()は、システム上でSMTPサーバーを使用します。 Windowsで使用できるサーバは少なくとも2つあります(hMailServerおよびxmail)。私は数時間かけて構成し、それらを取得しました。私の意見では最初の方が簡単です。今、hMailServerはWindows 7 x64で動作しています。
  2. mail()は、Linuxのリモートマシンまたは仮想マシンでSMTPサーバーを使用します。もちろん、Gmailのような実際のメールサービスでは、資格や鍵なしで直接接続することはできません。仮想マシンを設定したり、LANにある仮想マシンを使用することができます。ほとんどのLinuxディストリビューションには、そのままの状態でメールサーバーがあります。それを設定して楽しくしてください。私は、Debian 7でデフォルトのexim4を使用して、LANインタフェースをリッスンします。
  3. メーリングリブは直接接続を使用します。リブは簡単にセットアップできます。私はSwiftMailerを使用し、Gmailアカウントからメールを完全に送信します。私はPHPMailerもかなり良いと思う。

どのような選択肢であっても、抽象レイヤーを使用することをおすすめします。 Windowsを実行している開発マシン上でPHPライブラリを使用することができ、単にLinuxのプロダクションマシンでmail()の機能を使用することができます。抽象化レイヤーを使用すると、アプリケーションが実行されているシステムに応じてメールドライバを交換できます。抽象的MyMailerクラスまたはインターフェイスを抽象的なsend()メソッドで作成します。 2つのクラスを継承するMyPhpMailerMySwiftMailer。適切な方法でsend()メソッドを実装してください。そのSANE人 - ここ

12

を使用すると、GmailのSMTPを使用する場合、PHPのPEAR

// Pear Mail Library 
require_once "Mail.php"; 

$from = '<[email protected]>'; //change this to your email address 
$to = '<[email protected]>'; // change to address 
$subject = 'Insert subject here'; // subject of mail 
$body = "Hello world! this is the content of the email"; //content of mail 

$headers = array(
    'From' => $from, 
    'To' => $to, 
    'Subject' => $subject 
); 

$smtp = Mail::factory('smtp', array(
     'host' => 'ssl://smtp.gmail.com', 
     'port' => '465', 
     'auth' => true, 
     'username' => '[email protected]', //your gmail account 
     'password' => 'snip' // your password 
    )); 

// Send the mail 
$mail = $smtp->send($to, $headers, $body); 

でそれを行う方法がphpmailerのための設定

関連する問題