2017-02-03 2 views
1

Je travaille sur un système qui prend les courriels avant qu'ils ne soient envoyés, trouve toutes les images codées en base64 et les incorpore comme pièces jointes en ligne avec des identifiants de contenu (cid).SwiftMailer RfcComplianceException ID invalide donné

Eh bien, SwiftMailer n'aime pas la façon dont je fais les Id. J'ai essayé ceci:

$attachment = new \Swift_Attachment($image['bytes'], $image['name'], $image['type']); 
$attachment->setDisposition('inline'); 
$attachment->setId($image['content_id']); // content id is dhGCSXS6bXRbBQIKl2xoXNh4 

Et il m'a donné ceci:

// Swift_RfcComplianceException: Invalid ID given <dhGCSXS6bXRbBQIKl2xoXNh4> 

Donc apparemment il y a un format de contenu ids? J'ai regardé RFC 2111 et ne pouvais pas vraiment trouver quelque chose épelant un format. En regardant autour de moi, je pensais que c'était juste la chaîne aléatoire que vous pouviez trouver. Ou peut-être il est juste 4 heures et mon cerveau a vérifié.

En outre, je ne peux pas simplement utiliser le cid généré par Swift parce que le cid a déjà été généré et utilisé par un autre service plus tôt dans la chaîne.

Y a-t-il un format valide pour un cid?

Répondre

1

Je pense qu'il devrait y avoir un signe @ dans le CID.

Pour être plus précis, CID doit correspondre tout comme dans la source:

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

Et pour être encore plus précis, CID doit correspondre ci-dessous regex:

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

Pour plus de détails examiner: 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