8
votes

PHP: Comment envoyer un email avec pièce jointe à l'aide des paramètres SMTP?

J'envoie des courriels avec succès en utilisant le code suivant. Mais maintenant, je veux joindre un fichier texte (exemple: test.txt) avec courrier électronique. Aucune idée?

require_once "Mail.php";

$from = "Usman <from@example.com>";
$to = "Naveed <to@example.com>";
$subject = "subject";
$body = "";

$host = "smtp.gmail.com";
$username = "username";
$password = "password";

$headers = array ('From' => $from,
      'To' => $to,
      'Subject' => $subject);

$smtp = Mail::factory( 'smtp', array('host' => $host,
          'auth' => true,
          'username' => $username,
          'password' => $password ) );

$mail = $smtp->send( $to, $headers, $body );

if ( PEAR::isError($mail) ) {
echo( "<p>" . $mail->getMessage() . "</p>" );
} else {
echo( "<p>Message successfully sent!</p>" );
}


8 commentaires

Vous devez absolument supprimer votre nom d'utilisateur et votre mot de passe de votre question.


Plus important encore, vous devriez Changer votre mot de passe Gmail dès que possible, au cas où il est vrai.


J'ai oublié de supprimer le nom d'utilisateur / mot de passe tout en ajoutant des balises. Mais je l'ai changé :)


Surtout car il est toujours visible dans l'histoire.


Rien de mod ne peut faire à ce sujet d'être visible dans l'histoire, malheureusement ...


Si je supprime la question, je pense que ce ne sera pas public.


Je suis sérieux - changez votre mot de passe. Les questions supprimées sont toujours visibles pour les utilisateurs à une réputation suffisamment élevée.


@balpha: c'est déjà changé.


5 Réponses :


3
votes

Si vous utilisez en outre la poire PHP module Mail_mime Il fournit la appropriée Manipulation et codage pour intégrer les pièces jointes dans le cadre de votre courrier électronique.


0 commentaires

11
votes

a trouvé ce code comme l'un des premiers hits du Google: // Pièce de pièce jointe Recherche. XXX


5 commentaires

Probablement vos paramètres de messagerie de messagerie. Votre code utilise également mail :: usine , vous devez donc le savoir.


Plusieurs pièces jointes possibles par courrier :: usine?


Si vous avez une nouvelle question, posez une question: Stackoverflow.com/questions/ask


$ crlf = "rn"; devrait être $ crlf = "\ r \ n";


@TommCGee J'ai mis à jour le code pour supprimer "RN", c'est la valeur par défaut de toute façon: poire.php.net/manual/fr/package.mail.mail-mime.mail-mime.php



0
votes

Vous semblez utiliser le package de poirier.

Jetez un coup d'œil à l'objet Mail_Mine qui fait ce que vous essayez de faire et a un moyen facile d'ajouter des pièces jointes (simplement appellez des addattacattactes).

http://pear.php.net/manual /en/package.mail.mail-mime.php


0 commentaires

1
votes

Envoi de courrier électronique avec PHP se sent toujours un peu comme une lutte. Si vous êtes capable de les utiliser, je recommanderais l'une de ces deux bibliothèques de messagerie pour PHP:


1 commentaires

+1 pour SwiftMailer. Lorsque j'ai utilisé le courrier et le MIME et le code de réponse, la pièce jointe n'est pas passée, aucune erreur. J'ai eu SwiftMailer travaillant dans environ 10 minutes. Il peut être installé à travers la poire: swiftmailer.org/docs/installing.html .



2
votes

Voici le code que vous recherchez:

<?php
require_once "Mail.php"; // PEAR Mail package
require_once ('Mail/mime.php'); // PEAR Mail_Mime packge

$from = "Robert Davis <robertdavis@pobox.com>";
$to = "Sam Hill <sam.hill@aol.com>";
$subject = 'Test mime message with an attachment';

$headers = array ('From' => $from,'To' => $to, 'Subject' => $subject);

$text = 'Text version of email';// text and html versions of email.
$html = '<html><body>HTML version of email. <strong>This should be bold</strong></body>        </html>';

$file = './sample.txt'; // attachment
$crlf = "\n";

$mime = new Mail_mime($crlf);
$mime->setTXTBody($text);
$mime->setHTMLBody($html);
$mime->addAttachment($file, 'text/plain');

//do not ever try to call these lines in reverse order
$body = $mime->get();
$headers = $mime->headers($headers);

$host = "sasl.smtp.pobox.com";
$username = "robertdavis@pobox.com";
$password = "Kdu48Adi3";

$smtp = Mail::factory('smtp', array ('host' => $host, 'auth' => true,
 'username' => $username,'password' => $password));

$mail = $smtp->send($to, $headers, $body);

if (PEAR::isError($mail)) {
  echo("<p>" . $mail->getMessage() . "</p>");
}
else {
  echo("<p>Message successfully sent!</p>");
}
?>


2 commentaires

S'il vous plaît dites-moi que ce n'est pas votre vrai mot de passe et / ou que vous l'avez changé à un moment donné au cours des 2 dernières années ... :)


@Andrewwatson oui. Ce gars Robert Davis a changé.