SwiftMailer RfcComplianceException 给出的 ID 无效

SwiftMailer RfcComplianceException Invalid ID given

我正在开发一个系统,该系统在发送电子邮件之前接收电子邮件,在其中找到所有 base64 编码的图像,并将它们作为带有内容 ID (cid) 的内联附件嵌入。

好吧 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 有有效的格式吗?

我觉得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

有关详细信息,请查看:https://github.com/swiftmailer/swiftmailer/blob/de19df332219d73a2704525ba75aabd7dfaa303b/lib/classes/Swift/Mime/Grammar.php