2012-05-15 8 views
13

Wysyłam wiadomość e-mail za pomocą funkcji poczty PHP, ale chciałbym dodać określony plik PDF jako plik załącznika do wiadomości e-mail. Jak to zrobić?Jak załączyć plik PDF do wiadomości e-mail za pomocą funkcji poczty PHP

Tu jest mój bieżący kod:

$to = "[email protected]"; 
$subject = "My message subject"; 
$message = "Hello,\n\nThis is sending a text only email, but I would like to add a PDF attachment if possible."; 
$from = "Jane Doe <[email protected]>"; 

$headers = "From:" . $from; 
mail($to,$subject,$message,$headers); 

echo "Mail Sent!"; 
+0

[proszę kliknąć ten link aby generować dynamicznie PDF i wysłać wiadomość] [1] [1]: http://stackoverflow.com/questions/18396714/how-to-send-email-with -pdf-attachment-using-php/22141096 # 22141096 –

Odpowiedz

19

Powinieneś rozważyć użycie biblioteki pocztowej PHP, takiej jak PHPMailer, która sprawi, że procedura wysyłania poczty będzie znacznie prostsza i lepsza.

Oto przykład, jak korzystać z PHPMailer, to naprawdę proste!

<?php 

require_once('../class.phpmailer.php'); 

$mail    = new PHPMailer(); // defaults to using php "mail()" 

$body    = file_get_contents('contents.html'); 
$body    = eregi_replace("[\]",'',$body); 

$mail->AddReplyTo("[email protected]","First Last"); 

$mail->SetFrom('[email protected]', 'First Last'); 

$mail->AddReplyTo("[email protected]","First Last"); 

$address = "[email protected]"; 
$mail->AddAddress($address, "John Doe"); 

$mail->Subject = "PHPMailer Test Subject via mail(), basic"; 

$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test 

$mail->MsgHTML($body); 

$mail->AddAttachment("images/phpmailer.gif");  // attachment 
$mail->AddAttachment("images/phpmailer_mini.gif"); // attachment 

if(!$mail->Send()) { 
    echo "Mailer Error: " . $mail->ErrorInfo; 
} else { 
    echo "Message sent!"; 
} 

?> 

Alternatywą PHPMailer jest http://swiftmailer.org/

+0

co się stanie, jeśli mój załącznik zostanie zapisany na zdalnym serwerze? czy coś się zmienia, czy powinno działać? – paulalexandru

+0

[AddAttachment()] (https://github.com/PHPMailer/PHPMailer/blob/master/class.phpmailer.php#L2230) nie obsługuje plików zdalnych: 'Dodaj załącznik ze ścieżki w systemie plików' Używaj * file_get_contents() * z góry, @paulalexandru ...? :/ – Alastair

+3

Nie odpowiedziałeś na pytanie. Po prostu przedstawiłeś rozwiązanie alernatywne. Użytkownik wymagał funkcji poczty PHP, aby wysłać plik pdf. – Luben

2

Prosta odpowiedź: nie rób tego. ręczne tworzenie wiadomości MIME jest bolesnym biznesem i BARDZO łatwe do zepsucia.

Zamiast tego należy użyć PHPMailer lub Swiftmailer. To niemal banalne, aby robić z nimi załączniki, a otrzymasz DUŻO lepszą informację zwrotną na wypadek, gdyby coś wybuchło, v. prosta prawda/fałsz, że mail() raczy się wypluć.

1

wyeliminować błędy amortyzacyjne,

wymienić

$ korpusu = eregi_replace ("[]" '' $ ciała);

Z

$ body = preg_replace ('/.([^.]*$)/ i', '', $ ciała);

Powiązane problemy