web-dev-qa-db-ja.com

Zend Mailでメールを送信するときに問題が発生しますか?

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('[email protected]', 'Mr Example');
$mail->addTo('[email protected]', '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' => '[email protected]',
                '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('[email protected]', 'Some Sender');
$mail->addTo('[email protected]', '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' => '[email protected]',
                '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('[email protected]', 'Some Sender');
$mail->addTo('[email protected]', 'Some Recipient');
$mail->setSubject('TestSubject');
$mail->send($transport);
16
Goles

スタックトレースからわかるように、_Zend_Mail_は_Zend_Mail_Transport_Sendmail_をトランスポートアダプターとして使用します。
sendmail-compatible [〜#〜] mta [〜#〜] (Postfixなど)がシステムで実行されていることを確認してください。

別の方法として、 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');

役立つはずです。

16
Benjamin Cremer

Zend_Mailのもう1つの優れた点は、チェーン可能であるため、次のことができます。

$mail = new Zend_Mail();
$mail->setBodyText('My Nice Test Text')
     ->setBodyHtml('My Nice Test Text')
     ->setFrom('[email protected]', 'Mr Example')
     ->addTo('[email protected]', 'Mr Test')
     ->setSubject('TestSubject')
     ->send();

「chainable」が正しい単語であるかどうかはわかりませんが、あなたが要点を理解したことを願っています。これは無料のヒントです。答えはベンジャミンによって与えられた(右)

3
Ronn0

また、添付ファイル付きのMagentoでメールを送信する場合は、次のスニペットをご覧ください。

$config = array(
                'ssl' => 'tls',
                'auth' => 'login',
                'username' => '[email protected]',
                'password' => 'yourPassword'
                );

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


        $bodytext = "Please see attachment for customers detail.";
        $mail = new Zend_Mail();
        $mail->setFrom('[email protected]','Hassan');
        $mail->addTo('[email protected]' );
        $mail->setSubject('Customers info');
        $mail->setBodyText($bodytext);

        $file = $mail->createAttachment(file_get_contents($path.$fileName));
        $file ->type        = 'text/csv';
        $file ->disposition = Zend_Mime::DISPOSITION_INLINE;
        $file ->encoding    = Zend_Mime::ENCODING_BASE64;
        $file ->filename    = $fileName;

        if(!$mail->send($transport)) {
            echo 'Message could not be sent.';
            echo 'Mailer Error: ' . $mail->ErrorInfo;
        } else {
            echo 'Message has been sent';
        }
        echo "File Completed";exit;
    }
1

更新されたGolesの回答では、エラーを回避するために、上部に'ssl' => 'tls'、を追加する必要があります。

require_once('Zend/Mail/Transport/Smtp.php');
require_once 'Zend/Mail.php';
$config = array(
                'ssl' => 'tls',
                'auth' => 'login',
                'username' => '[email protected]',
                'password' => 'somepass'
                );

$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('[email protected]', 'Some Sender');
$mail->addTo('[email protected]', 'Some Recipient');
$mail->setSubject('TestSubject');
$mail->send($transport);
0