我正在研究一个系统,它在发送电子邮件之前接收电子邮件,查找所有base64编码的图像,并将它们作为内联附件嵌入内容ID(cid)。
Well SwiftMailer不喜欢我做Id的方式。我试过这个:
$attachment = new \Swift_Attachment( $image['bytes'], $image['name'], $image['type'] );
$attachment->setDisposition('inline');
$attachment->setId($image['content_id']); // content id is dhGCSXS6bXRbBQIKl2xoXNh4
它给了我这个:
// Swift_RfcComplianceException: Invalid ID given <dhGCSXS6bXRbBQIKl2xoXNh4>
显然有一种内容ID的格式?我查了RFC 2111并且找不到拼写格式的内容。从环顾四周来看,我认为这只是你可以提出的随机唯一字符串。或者也许只是4点钟,我的大脑已经检查过了。
另外,我不能只使用Swift生成的cid,因为cid已经被链中早期的另一个服务生成和使用。
那么cid的格式是否有效?
答案 0 :(得分:1)
我认为CID中应该有@符号。
更具体地说,CID应该与源中的匹配:
private function _assertValidId($id)
{
if (!preg_match(
'/^'.$this->getGrammar()->getDefinition('id-left').'@'.
$this->getGrammar()->getDefinition('id-right').'$/D',
$id
)) {
throw new Swift_RfcComplianceException(
'Invalid ID given <'.$id.'>'
);
}
}
更具体地说,CID应该匹配以下正则表达式:
/^(?:(?:[a-zA-Z0-9!#\$%&'\*\+\-\/=\?\^_`\{\}\|~]+(\.[a-zA-Z0-9!#\$%&'\*\+\-\/=\?\^_`\{\}\|~]+)*)|(?:"(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21\x23-\x5B\x5D-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F]))*"))@(?:(?:[a-zA-Z0-9!#\$%&'\*\+\-\/=\?\^_`\{\}\|~]+(\.[a-zA-Z0-9!#\$%&'\*\+\-\/=\?\^_`\{\}\|~]+)*)|(?:\[(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x5A\x5E-\x7E])|(?:\\[\x00-\x08\x0B\x0C\x0E-\x7F]))*\]))$/D