2010-11-25 20 views
1

Je viens de recevoir la fonction mail de PHP pour fonctionner correctement dans mon environnement de test.PHP: Ajouter des pièces jointes aux emails "à la volée"?

J'ai une application PHP qui produit un certain nombre de chaînes. Il serait vraiment agréable de convertir ces chaînes en pièces jointes (*.TXT -files) dans un e-mail, sans les stocker d'abord sur le disque et avoir à les relire. Serait-ce possible en PHP?

Répondre

2

Oui, c'est possible. Vous avez juste besoin de faire de votre message une multipart message avec la syntaxe suivante:

MIME-Version: 1.0 
Content-Type: multipart/mixed; boundary=random-boundary 

This is the optional preamble of a multipart/mixed message. 
--random-boundary 
Content-Type: text/plain 

This is the main message body. 
--random-boundary 
Content-Type: text/plain 
Content-Disposition: attachment; filename=file.txt 

This is the content of the attached file. 
--random-boundary-- 
This is the optional epilogue of a multipart/mixed message. 

Chaque partie peut alors être décrit comme tout autre message. Mais vous devriez probablement utiliser une bibliothèque qui fait cela pour vous.

Maintenant, si vous utilisez PHP’s mail function, la première ligne serait l'en-tête et le reste serait le contenu de ce message. La limite devrait être une limite aléatoire de sorte que la possibilité d'avoir cette chaîne avec -- en face d'être dans le contenu d'une partie est très improbable.

+0

Merci pour votre réponse. Il a fallu du temps pour le faire fonctionner mais ça a marché! Merci – Industrial

1

Et vous pouvez utiliser des classes Zend_Mail pour le code beaucoup plus facile le nom du fichier serait "smapleFilename" et son dernier paramètre dans createAttachment fonction mais ne FORGET pour configurer votre transport avant que l'échantillon :

$mail = new Zend_Mail(); 
     $mail->setBodyText("body") 
      ->createAttachment("your wanted text " , Zend_Mime::TYPE_TEXT,    
           Zend_Mime::DISPOSITION_ATTACHMENT , Zend_Mime::ENCODING_BASE64, "smapleFilename.txt"); 
     $mail->setFrom('[email protected]', 'Server'); 
     $mail->addTo('[email protected]'); 
     $mail->setSubject("subject"); 
     $mail->send(); 

dans le projet de cadre Zend vous feriez comme ceci:

resources.mail.transport.type = smtp 
resources.mail.transport.host = "mail.111111.com" 
resources.mail.transport.auth = login 
resources.mail.transport.username = [email protected] 
resources.mail.transport.password = test 
;resources.mail.transport.ssl = tls 
resources.mail.transport.port = 2525 
resources.mail.transport.register = true ; True by default