在添加附件时尝试通过不同的 smtp 服务发送电子邮件
Posted
技术标签:
【中文标题】在添加附件时尝试通过不同的 smtp 服务发送电子邮件【英文标题】:Trying to send email through different smtp service while adding attachments 【发布时间】:2020-05-09 19:14:03 【问题描述】:我在使用 PEAR 时遇到问题
$smtp = Mail::factory ('smtp', $params);
通过自定义电子邮件服务器重定向 smtp 并添加附件(实际上是几个),这似乎是不可能的。
$HeadersCO = array (
'From' => $From,
'Return-path' => $From,
'To' => $Email,
'Subject' => $Subject2C,
'Reply-To' => $From,
'Date' => date("r"),
'Errors-To' => $Admin_Email,
'Return-Path' => $Company,
'X-Mailer' => "php v".phpversion(),
'X-Domain' => $SERVER_NAME,
'X-Page' => $PHP_SELF,
'Content-type' => $contentUTF8,
'MIME-Version' => $mime);
$mimeCO = new Mail_mime(array('eol' => $crlf));
$mimeCO->setTXTBody($textcontent); //Text version
$mimeCO->sethtmlBody($message); //HTML version
$imgNo=0;
while ($imgNo < $totalImages)
$imageAtt = $imgarr[$imgNo];
$mimeCO->addAttachment($imageAtt, 'image/jpg');
$imgNo++;
$bodyCO = $mimeCO->get();
$hdrsCO = $mimeCO->headers($HeadersCO);
$mail2C = $smtp->send($email, $hdrsCO, $bodyCO);
这将向正确的电子邮件服务器发送一封电子邮件,其中包含嵌入的图像,但没有附加图像。 $mimeCO->addAttachment($imageAtt, 'image/jpg');
似乎根本不起作用,即使我只创建一个带有特定文件的附件。
我在某处读到,使用 PEAR mime & mail 时,您可以将电子邮件重定向到不同的 SMTP 服务或添加附件,但不能同时使用两者。它是否正确?如果是,那么这就解释了为什么我在 PEAR 中使用 $smtp->send
发送附件时遇到问题。
【问题讨论】:
您是否尝试过类似 PHPMailer 的东西? 嗨。谢谢你。我还没有。我的代码纯粹是 PHP,但是想要通过不同的邮件服务器重定向,我来到了 PEAR。在当前代码上投入了大量时间,我只是想看看是否有使用 PEAR 的解决方案。我听说过 Swift Mailer 和 PHPMailer。认为后者的存在时间更长? 我不确定,但我猜你可以查一下。其中任何一个都应该是可配置的,以允许您使用任何您喜欢的邮件服务器。 【参考方案1】:我能够通过使用 PHPMailer 解决我对 PEAR [通过外部 SMTP 服务器发送并添加附件] 的限制的困境。
我将 PHPMailer 设置为打开外部 SMTP 通道,最多发送 4 封不同的电子邮件,然后关闭 SMTP 会话,同时选择哪些电子邮件有附件、图像嵌入、不同的主题、不同的正文、回复、收件人和添加地址。
总的来说,我的代码从 1400 多行减少到了 800 行以下,我对这段代码的灵活性感到非常满意。
这是新 PHPMailer 代码的核心:
$mail = new PHPMailer(true); // Passing `true` enables exceptions
$mail->SMTPDebug = false; //3 Enables SMTP debugging, 0 turns off
$mail->isSMTP(); //Set PHPMailer to use SMTP.
$mail->SMTPKeepAlive = true; //Keep SMTP alive
$mail->Host = "smtp.emailserver.com";//Specify external SMTP servers
$mail->SMTPAuth = true;
$mail->Username = "username@mail.domain.com";
$mail->Password = "mypass";
$mail->SMTPSecure = "tls"; // Enable encryption, 'ssl'
$mail->Port = 587; //Set TCP port to connect to
//Recipients
$mail->addReplyTo('company@mail.domain.com', 'Company Name');
$mail->setFrom('company@mail.domain.com', 'Company Name');
//Add recipeints
$mail->addAddress($Email, "'".$FirstName." ".$LastName."'");
//CC and BCC
$mail->addBCC('me@mail.domain.com', "WebMaster Backup");
$mail->addCC('company@domain.com', "CC Backup");
//Attachments from array using PHP
$imgNo=0;
while ($imgNo < $totalImages)
$imageAtt = $imgArray[$imgNo];
$imageNam = $imgName[$imgNo];
$mail->addAttachment($imageAtt, $imageNam);
$imgNo++;
//Content
$mail->Subject = $Subject2C;
$mail->Body = $message;
$mail->AltBody = $textcontent;
$mail->isHTML(true); //Set email to be sent as HTML, false for Text only
/* =============Sending Customer Email====#1====== */
if($mail->send())
/* ==============Sending Company Email=====#2====== */
$mail->clearReplyTos();
$mail->clearAllRecipients(); // clear all Address/CC/BCC
$mail->clearAttachments();
$mail->addReplyTo($Email, "'".$FirstName." ".$LastName."'");
$mail->setFrom($Email, "'".$FirstName." ".$LastName."'");
$mail->addAddress('company@mail.domain.com', 'Email Sent');
$mail->addBCC('me@mail.domain.com', "WebMaster Backup");
$mail->Subject = $Subject2Company;
$mail->Body = $MessageEmail;
$mail->AltBody = $textcontent;
$mail->AltBody = $textcontent;
$mail->isHTML(true);
$mail->send();
/* ==============Subscribing Email=========#3====== */
$mail->clearAttachments();
$mail->clearReplyTos();
$mail->clearAllRecipients();
$mail->clearCCs();
$mail->addReplyTo('company@mail.domain.com', 'Company Name');
$mail->setFrom('company@mail.domain.com', 'Company Name');
$mail->addAddress($listmail, 'Subscribe List');
$mail->addBCC('me@mail.domain.com', "WebMaster Backup");
$mail->Subject = $subject;
$mail->Body = $SMessage;
$mail->AltBody = $body;
$mail->isHTML(false);
$mail->send();
$mail->SmtpClose(); //closing SMTP session
【讨论】:
以上是关于在添加附件时尝试通过不同的 smtp 服务发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章
通过 SMTP 发送带有附件、纯文本/文本和文本/html 的电子邮件