使用 html 代码发送 phpmailer 电子邮件

Posted

技术标签:

【中文标题】使用 html 代码发送 phpmailer 电子邮件【英文标题】:Send phpmailer email with html code 【发布时间】:2014-12-19 23:21:30 【问题描述】:

我制作了一个发送邮件的函数,但它们会解释 html 代码。我怎样才能让它在正文中发送准确的 html 代码?例如,用户应该收到<strong>text</strong> 而不是粗体“强”。

function sendmail($dest,$subj ,$htmlmessage,$textmessage) 
    $Mail = new phpMailer( true );
    try

        $Mail->IsSMTP(); // Use SMTP
        $Mail->SMTPAuth = TRUE; // enable SMTP authentication
        //$Mail->SMTPDebug = 2; // 2 to enable SMTP debug information

        $Mail->Host = "smtp.gmail.com"; // Sets SMTP server
        $Mail->Username = 'mymail@gmail.com'; // SMTP account username
        $Mail->Password = 'mypassword'; // SMTP account password
        $Mail->SMTPSecure  = "ssl"; //Secure conection
        $Mail->Port = 465; // set the SMTP port

        $Mail->SetFrom ( 'mymail@gmail.com', 'def' );
        $Mail->FromName    = 'myname';
        //$Mail->addReplyTo( 'mymail@gmail.com', 'Reply here' );

        $Mail->addAddress($dest, 'to' ); // To:
        $Mail->isHTML( false );

        $Mail->Subject=$subj;
        $Mail->Body=$htmlmessage;
        $Mail->AltBody=$textmessage;

        $Mail->Send();
    
    catch ( phpmailerException $e ) 

        file_put_contents( 'Mailerrors.txt', $e->errorMessage() , FILE_APPEND );
        die( "Problem with emailing." );
    

我在这里发送邮件

$dest='sendto@gmail.com';
$subj='hello';
$htmlmessage='this is the body<strong>asd</strong>';
$textmessage='this is the body';

sendmail($dest,$subj, $htmlmessage,$textmessage);

请注意,该功能确实有效并向我发送电子邮件,只是他们解释了 html 代码。

【问题讨论】:

设置$Mail-&gt;isHTML( true ); 那仍将代码解释为 HTML。 试试$htmlmessage='&lt;html&gt;&lt;body&gt;this is the body&lt;strong&gt;asd&lt;/strong&gt;&lt;/body&gt;&lt;/html&gt;'; 那仍然可以解释它。 【参考方案1】:

对此有几种可能的解决方案。

要仅发送纯文本,只需执行以下操作:

$mail->isHTML(false);

并且不要在$mail-&gt;AltBody中放入任何东西。这样,即使包含 HTML 标记,消息也会以纯文本形式发送。

如果您只希望邮件正文的一部分转义 HTML 呈现,您可以使用 htmlspecialchars 或将这部分标记包装在 &lt;pre&gt; 标记中。

htmlspecialchars 应用于整个邮件正文有点没有意义,因为它可以实现与isHTML(false) 相似的外观结果,但效率要低得多。

【讨论】:

【参考方案2】:

我做到了。我所要做的就是:

 $Mail->Body=htmlspecialchars($htmlmessage);

不确定这是否是个好主意,即使它有效。我相信一定还有其他方法。

【讨论】:

以上是关于使用 html 代码发送 phpmailer 电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

PhpMailer 发送的电子邮件内容仅显示纯文本,不包含 HTML 样式

如何使用 PHPMailer 从 PC 将文件附加到电子邮件

当我们使用 phpMailer 发送带有动态内容的邮件时,如何在电子邮件正文中显示多个内联图像

如何在没有 SMTP 的情况下从 PHPMAILER 发送电子邮件

通过 PHPMailer 发送电子邮件时出现身份验证错误

使用 SMTP PHPMailer 将不同的消息发送到不同的电子邮件帐户