18

ZendMail で電子メールを送信しようとしています (この単純なスクリプトで要約されています)

<?php
require_once 'Zend/Mail.php';

$mail = new Zend_Mail();
$mail->setBodyText('My Nice Test Text');
$mail->setBodyHtml('My Nice Test Text');
$mail->setFrom('test@example.com', 'Mr Example');
$mail->addTo('contact@mypage.com', 'Mr Test');
$mail->setSubject('TestSubject');
$mail->send();
?>

ただし、次のスタック トレースを取得します。

Fatal error:
Uncaught exception 'Zend_Mail_Transport_Exception' with message 'Unable to send mail. ' in /usr/share/php/libzend-framework-php/Zend/Mail/Transport/Sendmail.php:137

Stack trace:
#0 /usr/share/php/libzend-framework-php/Zend/Mail/Transport/Abstract.php(348): Zend_Mail_Transport_Sendmail->_sendMail()
#1 /usr/share/php/libzend-framework-php/Zend/Mail.php(1178): Zend_Mail_Transport_Abstract->send(Object(Zend_Mail))
#2 /var/www/hexreaction/mail/index2.php(11): Zend_Mail->send()
#3 {main} thrown in /usr/share/php/libzend-framework-php/Zend/Mail/Transport/Sendmail.php on line 137

編集:

私は SMTP を使用して電子メールを送信しようとはしていません。問題はそれほど深刻ではありませんが、まだ問題があります。

<?php
require_once 'Zend/Mail.php';
$config = array('auth' => 'login',
                'username' => 'contact@mypage.com',
                'password' => 'secretpass');

$transport = new Zend_Mail_Transport_Smtp('smtp.gmail.com', $config);

$mail = new Zend_Mail();
$mail->setBodyText('This is the text of the mail.');
$mail->setFrom('contact@mypage.com', 'Some Sender');
$mail->addTo('contact@mypage.com', 'Some Recipient');
$mail->setSubject('TestSubject');
$mail->send($transport);
?>

このスローはこのエラーです。理由はよくわかりません:

Fatal error:
Class 'Zend_Mail_Transport_Smtp' not found in /var/www/hexreaction/mail/index3.php on line 7

編集2:

これは私の最終的な作業コードです

require_once('Zend/Mail/Transport/Smtp.php');
require_once 'Zend/Mail.php';
$config = array('auth' => 'login',
                'username' => 'somemail@mysite.com',
                'password' => 'somepass',
                'ssl' => 'tls');

$transport = new Zend_Mail_Transport_Smtp('smtp.gmail.com', $config);

$mail = new Zend_Mail();
$mail->setBodyText('This is the text of the mail.');
$mail->setFrom('somemail@mysite.com', 'Some Sender');
$mail->addTo('somemail@mysite.com', 'Some Recipient');
$mail->setSubject('TestSubject');
$mail->send($transport);
4

4 に答える 4

17

スタックトレースでわかるように、トランスポートアダプタとしてZend_Mail使用されます。 したがって、sendmail互換のMTA(Postfixなど)がシステムで実行されていることを確認してください。Zend_Mail_Transport_Sendmail

別の方法として、 Zend_Mail_Transport_Smtpトランスポートアダプターを使用して、次のような外部SMTPサーバーを使用することもできます。

$tr = new Zend_Mail_Transport_Smtp('mail.example.com', array(
    'auth'     => 'login',
    'username' => $username,
    'password' => $password,
    'port'     => $port,
));
Zend_Mail::setDefaultTransport($tr);

編集:2番目の問題の場合:a

require_once('Zend/Mail/Transport/Smtp.php');

役立つはずです。

于 2010-08-11T06:13:23.270 に答える
3

Zend_Mail のもう 1 つの優れた点は、連鎖可能であるため、次のように実行できます。

$mail = new Zend_Mail();
$mail->setBodyText('My Nice Test Text')
     ->setBodyHtml('My Nice Test Text')
     ->setFrom('test@example.com', 'Mr Example')
     ->addTo('contact@mypage.com', 'Mr Test')
     ->setSubject('TestSubject')
     ->send();

「連鎖可能」という言葉が正しいかどうかはわかりませんが、要点を理解していただければ幸いです。これは単なる無料のヒントです。答えはベンジャミンによって与えられます(右)

于 2010-08-11T08:33:17.220 に答える