7

zf2 で text/plain、text/html、および添付ファイルを含む電子メールを送信する方法は? このコードを使用して、smtp でメールを送信します。

$files = $this->params()->fromFiles();
$smtp = new \Zend\Mail\Transport\Smtp();
$smtp->setAutoDisconnect(true);
$optn = new \Zend\Mail\Transport\SmtpOptions(array(
    'host'              => 'mail.myserver.com',
    'connection_class'  => 'login',
    'connection_config' => array(
        'username' => 'user@myserver.com',
        'password' => 'mypassword',
    ),
));
$smtp->setOptions($optn);


$htmlPart = new \Zend\Mime\Part('<p>some html</p>');
$htmlPart->type = Mime::TYPE_HTML;

$textPart = new \Zend\Mime\Part('some text');
$textPart->type = Mime::TYPE_TEXT;

$i=0;
$attaches = array();
foreach($files as $file){
    if ($file['error'])
        continue;
    $attaches[$i] = new \Zend\Mime\Part(file_get_contents($file['tmp_name']));
    $attaches[$i]->type = $file['type'].'; name="'.$file['name'].'"';
    $attaches[$i]->encoding = 'base64';
    $attaches[$i]->disposition = 'attachment';
    $attaches[$i]->filename = $file['name'];
    $i++;
}

$parts = array();
if (count($attaches)>0) {
    $parts = array_merge(array($textPart,$htmlPart),$attaches);
    $type = Mime::MULTIPART_MIXED;
}
else{
    $parts = array($textPart, $htmlPart);
    $type = Mime::MULTIPART_ALTERNATIVE ;
}
$body = new \Zend\Mime\Message();
$body->setParts($parts);

$message = new \Zend\Mail\Message();
$message->setFrom('user@myserver.com');
$message->addTo('receiver@myserver.com');
$message->setSubject('subject');
$message->setEncoding("UTF-8");
$message->setBody($body);
$message->getHeaders()->get('content-type')->setType($type);

$smtp->send($message);

ファイルを添付すると、ファイルとコンテンツが送信されますが、受信者の受信トレイにプレーン テキストと HTML テキストが一緒に表示されます。

<p>some html</p>
some text

ファイルを添付しないと、html テキストが単独で表示されます。

some html

何か助けはありますか?

4

4 に答える 4

0

からタイプを設定します。

$attaches[$i]->type = $file['type'].'; name="'.$file['name'].'"';

に:

$attaches[$i]->type = \Zend\Mime\Mime::TYPE_OCTETSTREAM;

また、SMTP サービスを使用している場合は、プロトコルを介して添付ファイルを許可することも確認する必要があります。

于 2013-06-12T19:48:43.253 に答える
-4

添付ファイル付きの電子メール メッセージ

$mail = new Zend\Mail\Message();
// build message...
$mail->createAttachment($someBinaryString);
$mail->createAttachment($myImage,
                        'image/gif',
                        Zend\Mime\Mime::DISPOSITION_INLINE,
                        Zend\Mime\Mime::ENCODING_BASE64);

この添付ファイル用に生成された MIME 部分をさらに制御したい場合は、createAttachment() の戻り値を使用してその属性を変更できます。createAttachment() メソッドは Zend\Mime\Part オブジェクトを返します。

$mail = new Zend\Mail\Message();

$at = $mail->createAttachment($myImage);
$at->type        = 'image/gif';
$at->disposition = Zend\Mime\Mime::DISPOSITION_INLINE;
$at->encoding    = Zend\Mime\Mime::ENCODING_BASE64;
$at->filename    = 'test.gif';

$mail->send();

別の方法は、Zend\Mime\Part のインスタンスを作成し、それを addAttachment() で追加することです。

$mail = new Zend\Mail\Message();

$at = new Zend\Mime\Part($myImage);
$at->type        = 'image/gif';
$at->disposition = Zend\Mime\Mime::DISPOSITION_INLINE;
$at->encoding    = Zend\Mime\Mime::ENCODING_BASE64;
$at->filename    = 'test.gif';

$mail->addAttachment($at);

$mail->send();

参考 1 参考2 参考3

于 2013-06-13T16:51:33.873 に答える