【发布时间】:2014-09-20 03:29:38
【问题描述】:
我正在使用 mandrill 来管理我的网站电子邮件。但我也想使用像 yahoo 或 google 这样的邮箱,所以我在 mandrill 中设置了一个路由,它将发送到 info@mydomain.com 的入站电子邮件转发到我的默认值邮箱(myEmail@ymail.com)。我编写了一个 PHP 代码来接收电子邮件,对其进行解码,然后将其转发到我的电子邮件。我使用 SwiftMailer 发送 SMTP 电子邮件。 它适用于没有任何附件的电子邮件。但是附件有一个奇怪的问题。它们交付损坏。我无法打开它们。 我搜索并测试了很多,但不幸的是找不到问题。
<?php
if(!isset($_POST['mandrill_events'])) {
echo 'A mandrill error occurred: Invalid mandrill_events';
exit;
}
// -------------- Receive --------------------------
$mail = array_pop(json_decode($_POST['mandrill_events']));
// ----------------- Send ----------------------------------------
include_once "swiftmailer-master/lib/swift_required.php";
$subject = $mail->msg->subject . " From " . $mail->msg->from_email;
$from = array('info@myDomain.ir' =>'myDomain');
$to = array(
'myEmail@yahoo.com' => 'Hamed Gh'
);
$transport = Swift_SmtpTransport::newInstance('smtp.mandrillapp.com', 25,tls);
$transport->setUsername('username');
$transport->setPassword('***********');
$swift = Swift_Mailer::newInstance($transport);
$message = new Swift_Message($subject);
$message->setFrom($from);
//I think there is a problem here!!
foreach ($mail->msg->attachments as $attachment) {
$myType = $attachment->type;
$myName = $attachment->name;
$myContent = $attachment->content;
$attachment = Swift_Attachment::newInstance()
->setFilename($myName)
->setContentType($myType)
->setBody($myContent)
;
$message->attach($attachment);
}
$body = $mail->msg->html;
$message->setBody($body, 'text/html');
$message->setTo($to);
$text = "Mandrill speaks plaintext";
$message->addPart($text, 'text/plain');
if($recipients = $swift->send($message, $failures) )
{
echo 'Message successfully sent!';
} else {
echo "There was an error:\n";
print_r($failures);
}
?>
【问题讨论】:
-
也许你应该试试 PHPMailer。 github.com/Synchro
-
我试过了,但还有其他问题!
-
为什么
tls不在引号中?undefined。可能没关系,只是不安全。 -
我可以看到
JSON。我很好奇$mail->msg->attachments。当然它必须是一个 JavaScript 数组。另外,请确保您的服务器允许附件。
标签: php email smtp swiftmailer