1

Zend_Mail を使用して、Zend Frameowrk ベースの MVC アプリケーションを配信しています。トランスポート構成は次のとおりです。

; Mail (SMTP Transport)
resources.mail.transport.type       = smtp
resources.mail.transport.host       = "mail.mydomain.com"
resources.mail.transport.auth       = login
resources.mail.transport.username   = "no-reply@mydomain.com"
resources.mail.transport.password   = "mypasswordhere"
resources.mail.transport.register   = true

resources.mail.defaultFrom.email    = "no-reply@mydomain.com"
resources.mail.defaultFrom.name     = "Automatic email from mydomain.com"
resources.mail.defaultReplyTo.email = "no-reply@mydomain.com"
resources.mail.defaultReplyTo.name  = "Automatic email from mydomain.com"

Zend アプリケーション ワークフローは、これをデフォルトのメール トランスポートとして設定しました。これはローカルホストでは正常に機能していますが、本番環境では失敗しています。送信プロセスは次のとおりです。

$objMail = new Zend_Mail();

if( $fromEmail != null ){
    $objMail->setFrom($fromEmail, $fromName);
}

$objMail->addTo($to);
if( $cc != null ){
    $objMail->addCc($cc);
}
if( $bcc != null ){
    $objMail->addBcc($bcc);
}

$objMail->setSubject($subject);

if( $messageHtml != null ){
    $objMail->setBodyHtml($messageHtml, mb_detect_encoding($messageHtml));
}
if( $messageTxt != null ){
    $objMail->setBodyText($messageTxt, mb_detect_encoding($messageTxt));
}
$objMail->send();

本番環境での例外は次のとおりです。

exception 'Zend_Mail_Protocol_Exception' with message 'Incorrect authentication data
' in /home/myuser/public_html/subdomains/myapp/library/Zend/Mail/Protocol/Abstract.php:431
Stack trace:
<<issue 0>> /home/myuser/public_html/subdomains/myapp/library/Zend/Mail/Protocol/Smtp/Auth/Login.php(95): Zend_Mail_Protocol_Abstract->_expect(235)
<<issue 1>> /home/myuser/public_html/subdomains/myapp/library/Zend/Mail/Protocol/Smtp.php(217): Zend_Mail_Protocol_Smtp_Auth_Login->auth()
<<issue 2>> /home/myuser/public_html/subdomains/myapp/library/Zend/Mail/Transport/Smtp.php(200): Zend_Mail_Protocol_Smtp->helo('localhost')
<<issue 3>> /home/myuser/public_html/subdomains/myapp/library/Zend/Mail/Transport/Abstract.php(348): Zend_Mail_Transport_Smtp->_sendMail()
<<issue 4>> /home/myuser/public_html/subdomains/myapp/library/Zend/Mail.php(1194): Zend_Mail_Transport_Abstract->send(Object(Zend_Mail))
<<issue 5>> /home/myuser/public_html/subdomains/myapp/application/controllers/MailController.php(404): Zend_Mail->send()
<<issue 6>> /home/myuser/public_html/subdomains/myapp/library/Zend/Controller/Action.php(516): MailController->sendmailAction()
<<issue 7>> /home/myuser/public_html/subdomains/myapp/library/Zend/Controller/Dispatcher/Standard.php(295): Zend_Controller_Action->dispatch('sendmailActi...')
<<issue 8>> /home/myuser/public_html/subdomains/myapp/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
<<issue 9>> /home/myuser/public_html/subdomains/myapp/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch()
<<issue 10>> /home/myuser/public_html/subdomains/myapp/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
<<issue 11>> /home/myuser/public_html/subdomains/myapp/public/index.php(26): Zend_Application->run()
<<issue 12>> {main}

私が言ったように、同じトランスポート構成を使用して localhost から問題なく電子メールを送信できます。また、同じ構成 (少なくとも同じ認証資格情報) で新しい電子メールをチェックする Gmail アカウントを持っていても、機能しています。

SMTP トランスポートとして使用する別の電子メール アカウントの作成をテストしました。「no-reply@mydomain.com」の代わりに「noreply@mydomain.com」と呼び、まったく異なるパスワードを使用しました。繰り返しますが、localhost からは問題なく動作しますが、本番環境では失敗します。

しかし、既存のアカウント (「admin@mydomain.com」アカウント資格情報) でテストしたところ、運用環境とローカルホストの両方で動作します!!

なぜこれが起こることができますか?

4

1 に答える 1

0

ZFコードを見ると、メッセージIncorrect authentication dataはZend Frameworkに固有のものではなく、メールサーバー自体によって返されています。メッセージ自体は、おそらく535エラーコードの形で戻ってきています。

tcpdump可能な方法がある場合は、Wiresharkまたはお好みのネットワークアナライザを使用して本番システムからパケットキャプチャを取得できるかどうかを確認してください。

本番環境と開発環境の両方で別のアカウントで正常に機能するとおっしゃっていたので、SSL / TLSを使用していないため、またはmail.mydomain.com2つのシステムで別のIPアドレスに解決されるために認証が失敗するとは思われません。

この時点で、メールトランザクションのパケットキャプチャを確認したいと思います。これが、2つのシステムのログインプロセス間の不一致を確認する唯一の方法である可能性があるためです。

お役に立てば幸いです。

于 2012-06-08T18:41:12.873 に答える