2017-02-03 15 views
1

Я работаю над системой, которая обрабатывает электронные письма до их отправки, находит все кодированные изображения base64 внутри и внедряет их как встроенные вложения с идентификаторами содержимого (cid).SwiftMailer RfcComplianceException Недопустимый идентификатор

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> 

Таким образом, очевидно, что есть формат идентификаторов контента? Я искал RFC 2111 и не мог найти ничего, что могло бы обозначить формат. Оглядываясь по сторонам, я подумал, что это просто какая-то случайная уникальная строка, которую вы можете придумать. Или, может быть, сейчас всего 4 часа, и мой мозг проверял.

Кроме того, я не могу просто использовать созданный Swift cid, потому что cid уже создан и используется другой службой ранее в цепочке.

Так есть ли действительный формат для cid?

ответ

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.'>' 
       ); 
     } 
    } 

И еще более конкретно, ИДС должен соответствовать ниже регулярное выражение:

/^(?:(?:[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

+0

https://github.com/swiftmailer/swiftmailer/blob/de19df332219d73a2704525ba75aabd7dfaa303b/lib/classes/Swift/Mime/Headers/IdentificationHeader.php#L168 – Mkay1