【问题标题】:php mail is getting cut offphp邮件被切断
【发布时间】:2013-07-06 09:05:27
【问题描述】:

我正在通过本地主机上的 php 邮件功能发送一封长 HTML 电子邮件。它一直被切断,我不知道为什么。

以下是生成截断电子邮件的代码:

$message = "<html><body>";
$message .= "<table rules=\"all\" style=\"border-color: #666;\" cellpadding=\"10\">";
$message .= "<tr><td colspan='2'>Application</td></tr>";
$message .= "<tr><td colspan='2'>&nbsp;</td></tr>";
$message .= "<tr><td colspan='2'>Personal Information</td></tr>";
$message .= "<tr><td>Name</td><td>{$fullname}</td></tr>";
$message .= "<tr><td>Gender</td><td>{$_POST['gender']}</td></tr>";
$message .= "<tr><td>Address</td><td>{$home_address}</td></tr>";
$message .= "<tr><td>Phone</td><td>{$_POST['primary-phone']}</td></tr>";
$message .= "<tr><td>Email</td><td>{$_POST['primary-email']}</td></tr>";
$message .= "<tr><td colspan='2'><p>&nbsp;</p></td></tr>";
$message .= "<tr><td colspan='2'>School Info</td></tr>";
$message .= "<tr><td>Address</td><td>{$school_address}</td></tr>";
$message .= "<tr><td>Phone</td><td>{$school_phone}</td></tr>";
$message .= "<tr><td colspan='2'>&nbsp;</td></tr>";
$message .= "<tr><td colspan='2'>Describe Yourself</td></tr>";
$message .= "<tr><td>Marital Status</td><td>{$_POST['marital-status']}</td></tr>";
$message .= "<tr><td>Spouse's Name</td><td>{$_POST['partner-name']}</td></tr>";
$message .= "<tr><td>College Degree?</td><td>{$_POST['college-degree']}</td></tr>";
$message .= "<tr><td>Graduation Year</td><td>{$_POST['grad-year']}</td></tr>";
$message .= "<tr><td>College Name</td><td>{$_POST['college-name']}</td></tr>";
$message .= "<tr><td>College Major</td><td>{$_POST['major']}</td></tr>";
$message .= "<tr><td colspan='2'>&nbsp;</td></tr>";
$message .= "<tr><td colspan='2'>Employment Info</td></tr>";
$message .= "<tr><td>Employer Name</td><td>{$_POST['current-employer']}</td></tr>";
$message .= "<tr><td>Date Employed</td><td>{$_POST['date-employed']}</td></tr>";
$message .= "<tr><td>Employer Address</td><td>{$employer_address}</td></tr>";
$message .= "<tr><td colspan='2'>&nbsp;</td></tr>";
//and on and on for another 40 lines

这是生成的电子邮件代码:

&lt;html&gt;&lt;body&gt;&lt;table rules="all" style="border-color: #666;" cellpadding="10"&gt;&lt;tr&gt;&lt;td colspan='2'&gt;Application&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan='2'&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan='2'&gt;Personal Information&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Name&lt;/td&gt;&lt;td&gt;Blake&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Gender&lt;/td&gt;&lt;td&gt;male&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Address&lt;/td&gt;&lt;td&gt;My Street&lt;br&gt;Town, IN 12345&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Phone&lt;/td&gt;&lt;td&gt;555-555-5555&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Email&lt;/td&gt;&lt;td&gt;my.email@gmail.com&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan='2'&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan='2'&gt;School Info&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Address&lt;/td&gt;&lt;td&gt;my street&lt;br&gt;my town, IN 12345&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Phone&lt;/td&gt;&lt;td&gt;555-555-5555&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan='2'&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan='2'&gt;Describe Yourself&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Marital Status&lt;/td&gt;&lt;td&gt;married&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Spouse's Name&lt;/td&gt;&lt;td&gt;Emily&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;College Degree?&lt;/td&gt;&lt;td&gt;yes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Graduation Year&lt;/td&gt;&lt;td&gt;2008&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;College Name&lt;/td&gt;&lt;td&gt;Purdue&lt;/td&gt;&lt;/tr&gt;

如您所见(或者可能不取决于格式),即使有更多信息,电子邮件也会在大学名称后被截断。

有什么问题? $message 太大? 本地邮件服务器发送太快? (我使用的是随 XAMPP 一起安装的 Mercury)

谢谢

【问题讨论】:

  • 哇,你肯定喜欢串联。删除前半部分,它是在同一点断裂,还是特定长度?
  • 检查它是否不是长度限制。例如向上移动“截止”部分中的几行,看看是否可能在一行中间被截断。并且作为一般的文体类型,不要使用多行连接来生成长字符串。至少使用HEREDOC
  • 多行连接应该仍然有效,尽管您不需要重用变量,只需在行尾执行.,不要使用;,然后继续您的在下一行引用。使用; 完成所有代码。我应该强调你的代码看起来应该仍然可以工作。检查您的mail() 方法,它应该包括您的content-type,例如:mail($email, 'Thank You for Contacting PHPglue', $msg, "From: PHPglue@PHPglue.com\r\ncontent-type: text/html");

标签: php email


【解决方案1】:

SMTP 对行的长度有限制,1024 或 2048 列,我不确定。定期在您的身体中添加换行符 (\r\n)。我建议在每个&lt;/tr&gt; 之后。这对表格的呈现方式没有影响,但应该可以防止截断。

【讨论】:

  • doh,应该注意到这一点,因此请使用处理此类事情的智能库。 phpmailer、swiftmailer 等
  • @Barmar,成功了!谢谢大家的建议。
  • 每个 SMTP 服务器都有不同的限制。最好的解决方案是使用wordwrap() 函数。
  • @pirios 所有服务器都必须至少允许 1024 行,他的表行甚至不接近。我不确定在 HTML 上使用 wordwrap() 是否可取。
  • @Barmar 应该 :) wordwrap() 最适合 HTML 内容。有些人正在使用chunk_split(),但对我来说不起作用。 wordwrap() 做正确,邮件很好。就我而言...
【解决方案2】:

检查你的 mail() 方法,它应该包含你的content-type,比如:

mail($email, 'Thank You for Contacting PHPglue', $msg, "From: PHPglue@PHPglue.com\r\ncontent-type: text/html");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2014-09-13
    • 2017-11-26
    • 2019-06-16
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    相关资源
    最近更新 更多