【问题标题】:Send an e-mail with html and text发送带有 html 和文本的电子邮件
【发布时间】:2016-07-03 13:19:28
【问题描述】:

我正在使用 Joomla 的 PHPmailer 集成版本来发送电子邮件。 我已经阅读了this answer,但有些东西对我不起作用。 AltBody 行抛出异常,PHP 无法到达 Send 行。

通过注释掉 AltBody 行,我的邮件的 HTML 版本被发送并且它工作正常。

我还使用 setBody 代替 Body,因为 Body 不起作用(从今天完成的进一步阅读我怀疑这是因为我使用 $mail->Body($msg) 而不是 $mail->Body = $msg,并且“Body 是一个属性,而不是一个方法” ,Marc B 在评论中说。)

这与我没有使用 SMTP 有关吗?
这可能是因为我试图分配给 AltBody 的内容吗? (它是一个通过连接多个文本字符串构建的变量,这些文本字符串使用 \n 作为换行符。)
这是因为别的原因吗?

很遗憾,我不能贴出整个php的代码。我会努力记住它,明天我会检查它并逐步纠正它。

$msg = '<p>some html';
$msg .= 'some more html. Escaped "apostrophes" like \' used because of language </p>';
$txt = "some text,\nusing doublequotes as the delimiter.";

$mail = JFactory::getMailer();
$mail->isHTML(true);
$mail->CharSet = "text/html; charset=UTF-8;";
$mail->setSender('example@example.com');
$mail->addRecipient('you@example.com');
$mail->setFrom('example@example.com');
$mail->setSubject('test mail');
$mail->setBody($msg);
$mail->AltBody($txt); # not working, commenting the line out works.
$mail->ClearCCs();
$mail->ClearBCCs();
$mail->AddBCC('example@example.com');
$mail->ClearAttachments(); # I know, this is not a cycle. But I'm not sure about injection, better delete it in case someone managed to add it.
$mail->ClearCustomHeaders();
if (empty($honeypot)) {
    $mail->send();
    exit('Mail sent');
}

这一切都在try 中,catch 用于捕获异常并回显它们。

【问题讨论】:

  • 如果您不发布任何内容,您希望其他人如何调试您的代码?阅读 PHPMailer 文档以了解如何设置 AltBody
  • @Synchro 我设法复制了一些。我希望这就足够了。
  • 只需阅读 PHPMailer 文档和代码。没有 setBody 方法; Body 和 AltBody 是属性,所以只需设置它们。您不需要调用 clearAttachments。
  • 也没有 setSender 或 setSubject,除非您的包装器添加它们。
  • @Synchro setBody、setSender 和 setSubject 都可以工作,所以我猜 Jfactory 添加了它们。我将查看它的文档,看看它们做了什么以及它们如何干扰设置 AltBody(我也尝试将其作为属性,但无济于事)。

标签: phpmailer joomla3.5


【解决方案1】:

请尝试使用代码,它可能对您有所帮助:

$mail = JFactory::getMailer();
$mail->isHTML(true);
$mail->CharSet = "text/html; charset=UTF-8;";
$mail->addRecipient($email_to);
$mail->addReplyTo($email, $name);
$mail->setSender(array($mailfrom, $fromname));
$mail->setSubject($subject);
$mail->setBody($body);
$sent = $mail->Send();

【讨论】:

  • 这是从无回复地址发送的。在我的情况下不需要使用 addReplyTo 。出于同样的原因,也无需添加 fromname。这如何解决我的问题?
  • 请尝试使用名称中的空白并注释 replayto 行的相同代码,这可能会根据您的要求正常工作。
猜你喜欢
  • 2014-04-04
  • 2010-11-22
  • 2018-11-07
  • 2013-06-10
  • 2012-06-15
  • 2013-11-26
  • 2011-12-27
  • 2018-07-24
  • 2014-07-13
相关资源
最近更新 更多