我最近尝试使用php邮件功能发送确认电子邮件,我已成功完成此操作。但是,当我在我的脚本中添加了一些东西时,某些东西似乎不起作用。
下面的代码是我开始工作的代码。我需要收集电子邮件所需的一切。
$to = 'Myemail';
$subject = 'Confirmation';
$message = 'This is a test';
$headers = 'MIME-Version: 1.0' . "\r\n" .
'Content-type: text/plain; charset=iso-8859-1' . "\r\n" .
'Content-Transfer_Encoding: 7bit' . "\r\n\r\n" .
'From: fromemail'."\r\n" .
'Reply-To: replyemail' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
但是,当我将相同的标题传输到另一个脚本(下面)时,邮件会传递,但存在一些问题。
1)我的邮件说邮件来自无人。 2)它不是出现在信息区域中的标题,而是在邮件中显示为文本 来自:来自电子邮件 回复:回复电子邮件 X-Mailer:PHP / 5.2.9
下面的脚本被包含在我写的另一个程序中,所以我想知道这是不是问题。我不认为它的语法,因为它与我上面使用的标题相同。我附上了我收到的邮件图片。 http://imgur.com/weNkr
非常感谢您的帮助!!!
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<HEAD>
</HEAD>
<body>
<?php
$message = $_POST['message'];
$subject = $_POST['subject'];
if ($message != null) {
include("connect.php");
$extract = mysql_query("SELECT * FROM `contact` ORDER BY `id`") or die("Error");
$counter = 0;
while ($row = mysql_fetch_assoc($extract)) {
$email[$counter] = $row['email'];
$counter++;
}
for ($x = 0; $x < $counter; $x++) {
$to = $email[$x];
$subject = $subject;
$message = $message;
$headers = 'MIME-Version: 1.0' . "\r\n" .
'Content-type: text/plain; charset=iso-8859-1' . "\r\n" .
'Content-Transfer_Encoding: 7bit' . "\r\n\r\n" .
'From: fromemail' . "\r\n" .
'Reply-To: replyemail' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
echo "EMAIL WAS SENT TO: ";
echo $email[$x];
echo "<BR>";
}
}
?>
</body>
</html>
答案 0 :(得分:7)
你的问题在于这一行:
'Content-Transfer_Encoding: 7bit' . "\r\n\r\n" .
//---------------------------------^^^^^^^^^^^
// Two line breaks ends the header block
// These remaining headers are seen as part of the message body
'From: fromemail'."\r\n" .
'Reply-To: replyemail' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
此处有一个额外的换行符,它会在From
和后续标题之前完成邮件的标题部分。删除额外的\r\n
。
答案 1 :(得分:0)
作为旁注,您可能需要设置-f
开关以设置地址信封,以便解决某些电子邮件客户端的“从无人”错误,如下所示:
$from = 'email@example.com';
mail($to, $subject, $message, $headers, '-f' . $from);
这当然是除了Michael纠正的标题错误之外。