【问题标题】:PHP html-Mail empty emailPHP html-Mail 空邮件
【发布时间】:2013-11-07 14:46:40
【问题描述】:

大家好,

我正在尝试使用默认的 PHP 邮件功能通过 PHP 发送几封电子邮件(我知道有库,但这是一个我只会运行 1 次的脚本...)

这是我正在使用的代码($leMSG 和电子邮件发送部分在 foreach 循环中):

$leMSG = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Uw nieuwe aanmeld gegevens voor website.nl</tilte></head><body><p>Beste klant van website.nl,</p><p>website.nl is overgegaan naar een nieuw systeem en uw account is mee verhuisd. Helaas konden we niet uw oude wachtwoord gebruiken, aangezien die beveiligd was opgeslagen. Daarom waren wij genoodzaakt om uw wachtwoord te resetten.</p><p>Uw nieuwe gegevens zijn:<br />Email: ' . $leEmail . '<br />Wachtwoord: ' . $password . '</p><p>U kunt uw gegevens <a href="http://wwww,website.nl/index.php?route=account/account"> hier </a> na lopen en desnoods veranderen.</p><p>Mochten er nog vragen / opmerkingen zijn, dan horen wij dat graag.</p><p>Met Vriendelijke Groet,<br />Webbeheer website.nl</p></body></html>';
$this -> mailer($leMSG, $item['email'], $item['customer_id']);

还有邮件功能:

function mailer($msg, $to, $id){
    $headers = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

    // Additional headers
    $headers .= 'To: email@addres.nl\r\n';
    $headers .= 'From: Webmaster website.nl <webmaster@website.nl> \r\n';

    if(mail('email@addres.nl', 'Uw nieuwe aanmeld gegevens voor website.nl', $msg, $headers)){
        return TRUE;
    }
    else{
        echo "<br />ERROR @id_" . $id;
    }
}

但是电子邮件是空的。当我查看源代码(使用 GMail)时,我可以看到有一些 HTML:

From: webmaster@website.nl 
To:  
Date: Thu, 7 Nov 2013 15:43:29 +0100 
Subject: Uw nieuwe aanmeld gegevens voor website.nl 

<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Uw nieuwe aanmeld gegevens voor website.nl</tilte></head><body><p>Beste klant van website.nl,</p><p>website.nl is overgegaan naar een nieuw systeem en uw account is mee verhuisd. Helaas konden we niet uw oude wachtwoord gebruiken, aangezien die beveiligd was opgeslagen. Daarom waren wij genoodzaakt om uw wachtwoord te resetten.</p><p>Uw nieuwe gegevens zijn:<br />Email: email@addres.nl<br />Wachtwoord: 55jws2tS0j</p><p>U kunt uw gegevens <a href="http://wwww,website.nl/index.php?route=account/account"> hier </a> na lopen en desnoods veranderen.</p><p>Mochten er nog vragen / opmerkingen zijn, dan horen wij dat graag.</p><p>Met Vriendelijke Groet,<br />Webbeheer website.nl</p></body></html>

有人知道这个脚本有什么问题吗?我没有收到任何错误或类似的错误...

编辑,现在使用更多的换行符来提高代码的可读性,但这并没有解决问题

$leMSG = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Uw nieuwe aanmeld gegevens voor Kadobos.nl</tilte></head>' . PHP_EOL;
$leMSG .= '<body><p>Beste klant van website.nl,</p>' . PHP_EOL;
$leMSG .= '<p>website.nl is overgegaan naar een nieuw systeem en uw account is mee verhuisd. Helaas konden we niet uw oude wachtwoord gebruiken, aangezien die beveiligd was opgeslagen. Daarom waren wij genoodzaakt om uw wachtwoord te resetten.</p>' . PHP_EOL;
$leMSG .= '<p>Uw nieuwe gegevens zijn:<br />Email: ' . $leEmail . '<br />Wachtwoord: ' . $password . '</p>' . PHP_EOL;
$leMSG .= '<p>U kunt uw gegevens <a href="http://wwww.website.nl/index.php?route=account/account"> hier </a> na lopen en desnoods veranderen.</p>' . PHP_EOL;
$leMSG .= '<p>Mochten er nog vragen / opmerkingen zijn, dan horen wij dat graag.</p>' . PHP_EOL;
$leMSG .= '<p>Met Vriendelijke Groet,<br />Webbeheer website.nl</p></body></html>' . PHP_EOL;

【问题讨论】:

  • 专业提示:在 HTML 字符串中使用换行符以使其更易于阅读。
  • 一件事 - 您在 $headers 中明确设置了 To: 标头,您不需要这样做;这由对mail() 的调用中的第一个参数处理。尝试删除该行。
  • 不要使用mail() 发送html 邮件。 mail() 是无用的垃圾。使用合适的邮件包,如 PHPMailer 或 Swiftmailer。
  • @MadaraUchiha,用更新的代码更新了我的问题。感谢您的提示,但它没有解决它;)
  • @andrewsi,感谢您的提示,但这并没有解决问题:S

标签: php email


【解决方案1】:

&lt;/tilte&gt; 在头部拼写错误。 应该是&lt;/title&gt;

【讨论】:

  • 您先生是我的英雄。谢谢,它奏效了。愚蠢的是它不适用于这个“微小”错误......
  • 宾果游戏!此外,这不是一个“小”错误。计算机不理解微妙之处。所以像这样的事情。
  • 好吧,如果你想不那么愚蠢,我会推荐这种调试方法。如果这与您所拥有的内容一样失败,请使内容更简单并仅发送纯文本。纯文本工作正常吗?好的,现在发送一个简单的 HTML 电子邮件。这样可行?好的,现在添加更复杂的 HTML。这种渐进式代码检查将使您的生活更轻松。
  • @JakeGould,感谢您的建议。我希望我永远不需要它,但至少我现在知道了;)
  • 小事总是能让你撑得最久……有时你只需要一双崭新的眼睛。
【解决方案2】:

不清楚。查看您的 HTML 并正确设置回车:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Uw nieuwe aanmeld gegevens voor website.nl</tilte>
</head>
<body>
<p>Beste klant van website.nl,</p>
<p>website.nl is overgegaan naar een nieuw systeem en uw account is mee verhuisd. Helaas konden we niet uw oude wachtwoord gebruiken, aangezien die beveiligd was opgeslagen. Daarom waren wij genoodzaakt om uw wachtwoord te resetten.</p>
<p>Uw nieuwe gegevens zijn:<br />Email: ' . $leEmail . '<br />Wachtwoord: ' . $password . '</p>
<p>U kunt uw gegevens <a href="http://wwww,website.nl/index.php?route=account/account"> hier </a> na lopen en desnoods veranderen.</p>
<p>Mochten er nog vragen / opmerkingen zijn, dan horen wij dat graag.</p>
<p>Met Vriendelijke Groet,<br />Webbeheer website.nl</p>
</body>
</html>

我想知道这条线:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

我的直觉说它应该自己关闭,所以它应该是;注意行尾的/

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

编辑:查看您的核心代码,这似乎是另一个问题:

$headers .= 'To: email@addres.nl\r\n';
$headers .= 'From: Webmaster website.nl <webmaster@website.nl> \r\n';

或许可以这样尝试。

$headers .= "To: " . 'email@addres.nl' . "\r\n";
$headers .= 'From: " . 'Webmaster website.nl <webmaster@website.nl>' . "\r\n";

单引号与双引号的问题可能是在邮件正文中添加更多行,从而在尝试处理邮件的 HTML 部分时让您的邮件程序阻塞。这意味着标题和正文之间的一行空间似乎会导致问题。所以看起来像这样;查看Subject: 和邮件正文之间的区域:

Subject: Uw nieuwe aanmeld gegevens voor website.nl 

<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Uw nieuwe aanmeld gegevens voor website.nl</tilte></head><body><p>Beste klant van website.nl,</p><p>website.nl is overgegaan naar een nieuw systeem en uw account is mee verhuisd. Helaas konden we niet uw oude wachtwoord gebruiken, aangezien die beveiligd was opgeslagen. Daarom waren wij genoodzaakt om uw wachtwoord te resetten.</p><p>Uw nieuwe gegevens zijn:<br />Email: email@addres.nl<br />Wachtwoord: 55jws2tS0j</p><p>U kunt uw gegevens <a href="http://wwww,website.nl/index.php?route=account/account"> hier </a> na lopen en desnoods veranderen.</p><p>Mochten er nog vragen / opmerkingen zijn, dan horen wij dat graag.</p><p>Met Vriendelijke Groet,<br />Webbeheer website.nl</p></body></html>

应该像这样渲染:

Subject: Uw nieuwe aanmeld gegevens voor website.nl
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Uw nieuwe aanmeld gegevens voor website.nl</tilte></head><body><p>Beste klant van website.nl,</p><p>website.nl is overgegaan naar een nieuw systeem en uw account is mee verhuisd. Helaas konden we niet uw oude wachtwoord gebruiken, aangezien die beveiligd was opgeslagen. Daarom waren wij genoodzaakt om uw wachtwoord te resetten.</p><p>Uw nieuwe gegevens zijn:<br />Email: email@addres.nl<br />Wachtwoord: 55jws2tS0j</p><p>U kunt uw gegevens <a href="http://wwww,website.nl/index.php?route=account/account"> hier </a> na lopen en desnoods veranderen.</p><p>Mochten er nog vragen / opmerkingen zijn, dan horen wij dat graag.</p><p>Met Vriendelijke Groet,<br />Webbeheer website.nl</p></body></html>

【讨论】:

  • 谢谢,已解决但没有帮助:S
  • 谢谢你的想法。幸运的是它现在渲染得很好,但我只是使用它,因为你永远不知道;)