首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PHP以纯文本形式发送HTML电子邮件

使用PHP以纯文本形式发送HTML电子邮件
EN

Stack Overflow用户
提问于 2012-04-18 16:07:15
回答 5查看 5.7K关注 0票数 1

我使用以下代码通过PHP发送电子邮件:

代码语言:javascript
复制
// Prepare email.
$headers = "From: Mi9 Vault <info@mi9vault.com.au>\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=ISO-8859-1";

$msg = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/edm/confirmation.html');
$msg = str_replace('{first_name}', $contact["First Name"], $msg);


// Send email
mail($contact["Email Address"], "Your Mi9 Registration is Confirmed", $msg, $headers);

confirmation.html是我们设置的超文本标记语言电子邮件。

我以前从来没有遇到过用上面的PHP代码发送电子邮件的问题,但是我能得到的似乎是一封包含所有HTML的电子邮件,而不是一封真正的HTML格式的电子邮件。

基本上我会收到一封邮件,内容是这样的:

代码语言:javascript
复制
MIME-Version: 1.0

Content-type: text/html; charset=ISO-8859-1
Message-Id: <20120418080325.C643B407EF@ds3219.dreamservers.com>
Date: Wed, 18 Apr 2012 01:03:25 -0700 (PDT)

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    </head>
    <body>
        .....

我有相同的PHP代码在另一个网站与相同的主机,它工作得很好…

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-04-18 16:14:09

似乎从某种意义上说,在标题的每两行之间都有额外的换行。我不确定它是如何发生的,因为你的代码没有把它们放在那里。可能是接收邮件的服务器搞乱了,将\r\n解释为两个换行符而不是一个换行符。首先,我会删除\r,只留下\n,看看会发生什么。我知道这对于RFC来说是不合适的--但还是从这个开始吧。

为了让你感觉更好,我使用了一个非常相似的代码-电子邮件被正确地发送。

票数 7
EN

Stack Overflow用户

发布于 2012-04-18 16:30:45

您并不知道您正在哪个平台上运行,以及mail()使用的是哪个邮件程序。您使用的邮件程序似乎期望\n作为分隔符。您可以使用PHP_EOL代替\r\n或\n,在这种情况下,它将使用运行平台中使用的行分隔符。

对于linux/unix系统,

标题中的PHP换行符应该是运行

的系统的本机行结束符。

邮件()函数不与SMTP服务器通信,因此RFC2822在这里不适用。mail()正在与本地系统上的命令行程序对话,该程序需要系统自带的换行符是合理的。

(source)

从长远来看,可以考虑使用mail()替代方法,这些方法通常解决了几个类似的问题。mail()是一个非常“原始”的函数,它有几个陷阱,包括头注入。例如,在Swift MailerPHPMailer中已经解决了这类问题。

票数 2
EN

Stack Overflow用户

发布于 2012-04-18 16:15:26

尝试更改:

代码语言:javascript
复制
$headers = "From: Mi9 Vault <info@mi9vault.com.au>\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=ISO-8859-1";

代码语言:javascript
复制
$headers = 'From: Mi9 Vault <info@mi9vault.com.au>' . "\r\n";
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10205366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档