2017-02-03 53 views
1

電子メールが送信される前に電子メールを受信し、その中のすべてのbase64でエンコードされたイメージを検索し、コンテンツID(cid)付きのインライン添付ファイルとして埋め込むシステムに取り組んでいます。SwiftMailer RfcComplianceException無効なIDが指定されました

よく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時で、私の脳はチェックアウトしています。

また、Cidが既に生成され、チェーンの前の別のサービスで使用されているため、Swiftによって生成された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.'>' 
       ); 
     } 
    } 

を、さらに具体的には、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

+0

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

関連する問題