所以这很奇怪。
我收到一封正在生成的电子邮件,上面有一个451错误,除了导致它的原因是主题行的纯文本部分:s
这个主题行通过罚款:
$this->email->subject('New task in "'.$data['property_name'].'"');
这个会导致451错误:
$this->email->subject('A user has completed their task in "'.$data['property_name'].'"');
作为参考,错误451用于裸LF(http://cr.yp.to/docs/smtplf.html)。它通常是由未在设置中声明行结束规则或使用单引号引起的,即'/r/n/'而不是"/r/n"。我的设置是正确的,电子邮件工作正常。
调试器中值得注意的是,较长的行显示为:
Subject: =?utf-8?Q?A_user_has_completed_their_task_in_"TASKNAME
?=
=?utf-8?Q?"?=
而工作的一个看起来像:
Subject: =?utf-8?Q?New_task_in_"TASKNAME"?=
这是线人窃听器吗?
你从哪里得到的451错误?我看到451被报告为处理中的本地错误。
如果主题字符串超过76个字符,则电子邮件类会将其分解:
109 // Line length must not exceed 76 characters, so we adjust for
110 // a space, 7 extra characters =??Q??=, and the charset that we will add to each line
你可以看到它在行动:
function test()
{
echo "<pre>";
print_r($this->_prep_q_encoding('A user had completed their task in "Going to change string to something"'));
}
function _prep_q_encoding($str, $from = FALSE)
{
$this->crlf= "\n";
$this->charset = 'utf-8';
$str = str_replace(array("\r", "\n"), array('', ''), $str);
// Line length must not exceed 76 characters, so we adjust for
// a space, 7 extra characters =??Q??=, and the charset that we will add to each line
$limit = 75 - 7 - strlen($this->charset);
// these special characters must be converted too
$convert = array('_', '=', '?');
if ($from === TRUE)
{
$convert[] = ',';
$convert[] = ';';
}
$output = '';
$temp = '';
for ($i = 0, $length = strlen($str); $i < $length; $i++)
{
// Grab the next character
$char = substr($str, $i, 1);
$ascii = ord($char);
// convert ALL non-printable ASCII characters and our specials
if ($ascii < 32 OR $ascii > 126 OR in_array($char, $convert))
{
$char = '='.dechex($ascii);
}
// handle regular spaces a bit more compactly than =20
if ($ascii == 32)
{
$char = '_';
}
// If we're at the character limit, add the line to the output,
// reset our temp variable, and keep on chuggin'
if ((strlen($temp) + strlen($char)) >= $limit)
{
$output .= $temp.$this->crlf;
$temp = '';
}
// Add the character to our temporary line
$temp .= $char;
}
$str = $output.$temp;
// wrap each line with the shebang, charset, and transfer encoding
// the preceding space on successive lines is required for header "folding"
$str = trim(preg_replace('/^(.*)$/m', ' =?'.$this->charset.'?Q?$1?=', $str));
return $str;
}
哪个输出
=?utf-8?Q?A_user_had_completed_their_task_in_"Going_to_change_string_to_?=
=?utf-8?Q?something"?=
我见过其他人在设置电子邮件配置时遇到问题。你有
$config['crlf'] = "\r\n"; //double quotes ("), not single (')
$config['newline'] = "\r\n"; //double quotes ("), not single (')
套?
我认为你混淆了单引号和双引号。尝试:
$this->email->subject('A user has completed their task in '.$data['property_name']);
问题内容: 我有一个这样的字符串: 我想以正确的UTF-8编码获取文件名。在Maven Central的某处是否有一个库方法可以为我执行此解码,还是我需要测试模式并手动解码base64? 问题答案: 在MIME术语中,那些编码的块称为编码字。看看在JavaMail的。该方法将解码字符串中的所有编码词。 你可以用
我已经从CodeIgniter发送了一封电子邮件,但我不知道为什么我的电子邮件会被截断,或者它会被包含在带有问号的黑钻石中。这是真的,我使用波斯字符,但标题是utf-8无论如何。下面是发送电子邮件的CodeIgniter代码: 只要注意主题中的非拉丁字符:
问题内容: printf下划线为红色并给出错误信息?怎么了?我用过Eclipse 问题答案: 从Java 5开始可用。因此,看起来您的项目已配置为使用Java 1.4。右键单击更改项目的配置,然后转到“属性”: 选择Java Build Path选项,并确保您为项目使用正确的Java JDK版本。 选择Java编译器选项,并确保您使用的是Java 1.5或更高版本。 如果碰巧要用Java 8创建项
给出以下代码片段: 当我在Eclipse中执行这段代码时,我收到一封电子邮件,如: 这就是我想要的! 但后来,我尝试在部署在Jboss-4.0.5中的应用程序中使用这个主应用程序,我收到了这样一封电子邮件: 因此,不仅消息不是html消息,而且电子邮件的主题也丢失了,而且似乎没有使用收件人发送电子邮件,而是使用密件抄送<我不知道这种行为的原因是什么,有没有人可以帮助我,或者只是给我一些提示。 更新
我有php邮件,我在我的网页上有联系表格。如果有人填写详细信息,如姓名,联系人,电子邮件,消息等,然后点击发送按钮,下面的错误会出现在屏幕上,但我可以接收邮件,但每次发送邮件都会出现此错误消息。 SMTP-
我使用OpenText Content Server中的AnswerModules内容脚本调用DocuSign API并发送远程签名电子邮件。使用docusign.createEnvelopeAndSend(null,envDef),我可以发送信封定义,其中包含要签名的文档、收件人详细信息、电子邮件主题和电子邮件正文。我们有多种场景,其中根据文档类别使用不同的电子邮件正文和主题。现在我们有了一个新