如果客户允许,我希望使用HTML发送电子邮件,否则发送文字。如下所示:
$mail = new PHPMailer();
$htmlMessage="Hello John,<br /><br />How are you?";
$textMessage="Hello John,\n\nHow are you?";
$mail->Body = $htmlMessage;
$mail->AltBody = $textMessage;
但是,我不想为两者写出整个消息,但创建一个版本,并自动将其转换为第二个版本。
鉴于此确切消息,我应该创建$textMessage
,然后使用nl2br()
添加HTML换行符吗?
如果我的HTML消息有点复杂并包含粗体文本,列表等,该怎么办?我很好,短信有点难看,但不要在邮件中留下一堆HTML标签。这种情况有哪些选择?
答案 0 :(得分:1)
虽然不是100%好看(取决于HTML内容),strip_tags()
会做你想要的。
$mail = new PHPMailer();
$htmlMessage="Hello John,<br /><br />How are you?";
$textMessage="Hello John,\n\nHow are you?";
$mail->Body = $htmlMessage;
$mail->AltBody = strip_tags( $htmlMessage );
您不希望使用nl2br()
,因为AltBody只期望纯文本。将显示任何HTML格式(因此<br/>
将在您的内容中显示为文本)。你可以这样做:
$mail->AltBody = strip_tags( str_replace( $htmlMessage, array( '<br>', '<br/>', '<br />' ), "\r\n" ) );
答案 1 :(得分:1)
呃,你知道PHPMailer有两个内置HTML到纯文本转换器吗? Strip_tags
是一个相当糟糕的解决方案 - 它通常会导致难以理解的混乱。我得到的最好结果来自于使用真正的基于文本的浏览器(特别是elinks),它可以很好地将HTML呈现为文本,能够执行诸如保留多列布局,下划线,链接之类的操作引用和一些CSS。但是,shelling out并不总是一个选项,因此存在PHP解决方案。
PHPMailer会对msgHTML()
中的纯文本版本进行自动转换,因此您的代码就是这样:
$mail = new PHPMailer();
$htmlMessage="Hello John,<br /><br />How are you?";
$mail->msgHTML($htmlMessage);
可以选择稍微更高级的转换器(捆绑在extras
文件夹中),您可以通过在msgHTML
中设置“高级”参数来触发:
$mail->msgHTML($htmlMessage, '', true);
尝试两者,看看什么最适合你 - 但总是值得阅读文档和源代码!
更新由于我发布了这个答案,PHPMailer出于许可证原因不得不删除捆绑的html2text类,但是插入自己的转换器的机制已经改进了 - advanced
参数现在可以成为一个闭包,您可以通过它来实现自己的转换器,例如您可能找到的任何转换器on packagist。