3

私の問題に似ている他のいくつかの投稿に気づきましたが、それらは私のシナリオに固有のものではないか、物事をよく理解していないことがわかりました。

私の状況:PHPのmail()関数を使用してLAMPサーバーからメールを送信しようとしています。メールを別の専用メールサーバーに中継したい。

問題:メールを送信できないようです...時々。ドメイン外のアカウントにメールを送信できるように見えても、ドメイン/ネットワーク内のアカウントにメールを送信できない場合があります。ドメインコントローラーに対して認証できないことについてログが頻繁に不平を言うのを見てきました...しかし、それについて心配する必要はありませんか?

私が混乱しているのは、PHPのmail()関数がサーバーへのSMTPメッセージを自動的に作成することだと思いますか?または、ローカルホストを参照するようにphp.ini設定を設定してから、メッセージをメールサーバーに送信するようにsendmail/postfixを構成する必要がありますか。また、LAMPサーバーがメールサーバーに接続しようとすることだけを指定した場合、なぜドメインコントローラーで認証するのが面倒なのですか?

うまくいけば、誰かが私がこれを整理するのを手伝ってくれるでしょう。それはしばらくの間私を悩ませてきました、そして解決策を見つけることができませんでした。ありがとうございました、

4

2 に答える 2

2

PHP mail()関数はサーバーへのSMTPメッセージを自動的に作成しますか?または、ローカルホストを参照するようにphp.ini設定を設定してから、メールサーバーにメッセージを送信するようにsendmail /postfixを構成する必要がありますか?

PHPのmail()関数は、それ自体ではそれほど多くのことを行いません。Linuxでは、通常、php.iniで定義された設定を使用して、sendmailなどのローカルインスタンスに接続します。php.iniの例からこのセクションをチェックしてください。

[mail function]
; For Win32 only.
; SMTP = localhost
; smtp_port = 25

; For Win32 only.
;sendmail_from = me@example.com

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
sendmail_path = /usr/sbin/sendmail -t -i

Windowsの場合、構成されたポートのSMTPサーバーがmail()によって使用されます。Linuxの場合、定義されたsendmailパスが使用されます。

言い換えると、WindowsのPHP mail()関数は、ローカルまたはリモートのSMTPサーバーに接続します。Linux上のPHPmail()は同じことを行うことができません。Linuxでは、この関数は、SMTPサーバーに接続するために自分でセットアップする必要があるローカルのsendmailインストールのみを使用します。この種の構成の代替手段は、SMTP機能を単独で提供するPHPMailer、Swiftmailer、Zend_Mailなどを使用することです。


LAMPサーバーがメールサーバーに接続しようとすることだけを指定した場合、なぜドメインコントローラーで認証するのが面倒なのですか?

私はこれについて専門家になるにはほど遠いですが、私が理解している限り、郵送に必要な外部リソースにアクセスするには、ネットワーク内の認証されたユーザーである必要があります。ドメインコントローラーは、そのような権限を付与します。

于 2012-10-01T18:52:38.943 に答える
2

Swiftmailerドキュメント)またはPhpMailerの使用を開始すると、作業が楽になります...

Swiftmailerの例:

require_once 'lib/swift_required.php';
$transport = Swift_MailTransport::newInstance();
$mailer = Swift_Mailer::newInstance($transport);
$message = Swift_Message::newInstance('Wonderful Subject')
    ->setFrom(array('john@doe.com' => 'John Doe'))
    ->setTo(array('receiver@domain.org', 'other@domain.org' => 'A name'))
    ->setBody('Here is the message itself');
$mailer->send($message);

PhpMailerの例:

$mail             = new PHPMailer(); // defaults to using php "mail()"
$mail->SetFrom('name@yourdomain.com', 'First Last');
$mail->AddReplyTo("name@yourdomain.com","First Last");
$mail->AddAddress("whoto@otherdomain.com", "John Doe");
$mail->Subject    = "PHPMailer Test Subject via mail(), basic";
$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
$mail->MsgHTML($body);
$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!";
}

私はSwiftmailerが好きですが、あなたはあなたに最良の選択を選択します;-)

于 2012-10-01T18:32:47.290 に答える