【问题标题】:Php Mail() function: Headers was printedPhp Mail() 函数:打印了标题
【发布时间】:2014-05-07 22:21:50
【问题描述】:

我试图在 PHP 中使用 mail() 函数发送邮件。电子邮件发送成功,并且它存在于收件箱中。问题是打印在电子邮件标题中的标题。我已经尝试了标题的各种代码。 1.第一个是这样的:

$headers = "From: My Example Email".'\r\n'.
"MIME-Version: 1.0".'\r\n'.
"Content-Type: text/html; charset=ISO-8859-1".'\r\n'.
'X-Mailer: PHP/' . phpversion();

结果:My Example EmailrnMIME-Version

2.第二个标题代码:

$headers = "From: My Example Email"."\r\n".
"MIME-Version: 1.0"."r\n".
"Content-Type: text/html; charset=ISO-8859-1"."\r\n".
'X-Mailer: PHP/' . phpversion();

结果:电子邮件未发送

3.第三个标题代码:

$headers = "From: My Example Email".'"\r\n"'.
"MIME-Version: 1.0".'"\r\n"'.
"Content-Type: text/html; charset=ISO-8859-1".'"\r\n"'.
'X-Mailer: PHP/' . phpversion();

结果:My Example Emailrn

我使用 PHP 5.4.19。任何答案都会有帮助。

更新

这是我的全部代码:

class User{
 function callname(){
     $user = $_SESSION['id'];
     $query = ("SELECT * FROM user WHERE user.id='$user'");
     while ($result=mysql_fetch_array($query)){
          echo ($result['username']);}}}

$user = new User;

if($_SERVER["REQUEST_METHOD"] == "POST"){
   $username = mysql_real_escape_string(trim($_POST['username']));
   $check = mysql_num_rows(mysql_query("SELECT * FROM user WHERE username='$username'"));
 if ($check==TRUE){
   $name = $user->callname();
   $to = "myemail@domain.com";
   $subject = "Example Subject";
   $headers = "From: My Example Email".'"\r\n"'.
   "MIME-Version: 1.0".'"\r\n"'.
   "Content-Type: text/html; charset=ISO-8859-1".'"\r\n"'.
   'X-Mailer: PHP/' . phpversion();
   $message = "Hai $name, this is the new message.";

        mail($to, $subject, $message, $headers);
} else {
?>
    <script type="text/javascript">
        alert("Sorry, username not exist !");
    </script>
    <?php }}

新的更新:

经过长时间的尝试和这里的大家的帮助,终于找到了解决方案。但也许这很不寻常。

$headers = 'From: My Example Email'.'""'.
'MIME-Version: 1.0'.'""'.
'Content-Type: text/html; charset=ISO-8859-1'.'""'.
'X-Mailer: PHP/' . phpversion();

但我还不明白。一些文献说每个部分都应该用“\r\n”粘合,但这在我的代码中不起作用。 感谢您的每一个帮助。非常感谢。这真的很有帮助。

【问题讨论】:

  • 如果您的服务器正在运行 Postfix - 您最好使用 PHP_EOL 而不是 \r\n 作为行终止符。
  • 我在 localhost 中运行它。我怎样才能看到里面的 Postfix?

标签: php email-headers


【解决方案1】:

你可以试试我的php邮件功能。此功能将为您的电子邮件生成 RFC 兼容的正文和标题部分。

function buildMime($msg){
$num = md5(time());
$num = "_001_".$num."_";

$headers = "From: SenderName<senderEmail@adress.com>\n";
$headers .= "Return-Path: <senderEmail@adress.com>\n";
$headers .= "Reply-To: <senderEmail@adress.com>\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/alternative;\n";
$headers .= "   boundary=\"".$num."\"\n";
$headers .= "X-Mailer: PHP v".phpversion()."\n";

$body = "This is a multi-part message in MIME format.\n\n";

$body1 = "--".$num."\n";
$body1 .= "Content-Type: text/plain; charset=utf-8\n";
$body1 .= "Content-Transfer-Encoding: 8bit\n\n";

$body1 .= trim(strip_tags($msg))."\n";
$body1 .= "\n";

$body1 .= "--".$num."\n";
$body1 .= "Content-Type: text/html; charset=utf-8\n";
$body1 .= "Content-Transfer-Encoding: 8bit\n\n";

$body1 .= $msg;
$body1 .= "\n";



$bodyx = "--".$num."--\n";
return array('body' => $body.$body1.$bodyx, 'headers' => $headers);
}
$mime = buildMime("<h1>Hello</h1><p>this is my firs test message</p>");
mail('whereToSend@email.com', 'Your subject', $mime[body], $mime[headers]);
?>

【讨论】:

  • 谢谢伙计,但是如何使用呢?你能给我一个例子吗?对不起,因为我是新手
【解决方案2】:
$headers = "From: My Example Email"."\r\n".
"MIME-Version: 1.0"."\r\n".
"Content-Type: text/html; charset=ISO-8859-1"."\r\n".
'X-Mailer: PHP/' . phpversion();

试试这个

【讨论】:

    【解决方案3】:

    $headers = "MIME 版本:1.0" 。 "\r\n";
    $headers .= "内容类型:text/html;charset=UTF-8" 。 "\r\n";


    $headers .= '来自:' 。 "\r\n";
    $headers .= '抄送:myboss@example.com' 。 "\r\n";

    邮件($to,$subject,$message,$headers);

    【讨论】:

      【解决方案4】:

      您没有正确封装引号。

      正确的做法...

      $headers = 'From: My Example Email'."\r\n".
          'MIME-Version: 1.0'."\r\n".
          'Content-Type: text/html; charset=ISO-8859-1'."\r\n".
          'X-Mailer: PHP/' . phpversion();
      

      EDITED CODE

      <?php
      class User{
          function callname(){
              $user = $_SESSION['id'];
              $query = ("SELECT * FROM user WHERE user.id='$user'");
              while ($result=mysql_fetch_array($query)){
                  return $result['username'];}}}
      
      $user = new User;
      
      if($_SERVER["REQUEST_METHOD"] == "POST"){
          $username = mysql_real_escape_string(trim($_POST['username']));
          $check = mysql_num_rows(mysql_query("SELECT * FROM user WHERE username='$username'"));
          if ($check==TRUE){
              $name = $user->callname();
              $to = "myemail@domain.com";
              $subject = "Example Subject";
              $headers = "From: My Example Email"."\r\n".
                  "MIME-Version: 1.0"."\r\n".
                  "Content-Type: text/html; charset=ISO-8859-1"."\r\n".
                  "X-Mailer: PHP/" . phpversion();
              $message = "Hai $name, this is the new message.";
      
              mail($to, $subject, $message, $headers);
          } else {
              ?>
              <script type="text/javascript">
                  alert("Sorry, username not exist !");
              </script>
          <?php }}
      

      【讨论】:

      • 不工作的人。如果我使用双引号"\r\n",则电子邮件不想发送。
      • 电子邮件不想发人。我的更新代码导致发送的电子邮件和标题来自:我的示例 Emailrn。所以与此混淆。感谢您的帮助。
      猜你喜欢
      • 2014-09-04
      • 2012-07-21
      • 2013-07-15
      • 2021-06-03
      • 1970-01-01
      • 1970-01-01
      • 2014-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多