Skocz do zawartości

[PHP] Email z załącznikiem


Ghost

Recommended Posts

Mam coś takiego, to znaczy kawałek kodu wykorzystującego PHP Mailer

try {
  $mail->SetFrom('name@yourdomain.com', 'First Last');
  $mail->AddAddress('whoto@otherdomain.com', 'John Doe');
  $mail->Subject = 'PHPMailer Test Subject via mail(), advanced';
  $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; // optional - MsgHTML will create an alternate automatically
  $mail->MsgHTML(file_get_contents('contents.html'));
  $mail->AddAttachment('images/phpmailer.gif');      // attachment
  $mail->AddAttachment('images/phpmailer_mini.gif'); // attachment
  $mail->Send();
  echo "Message Sent OK</p>\n";
} catch (phpmailerException $e) {
  echo $e->errorMessage(); //Pretty error messages from PHPMailer
} catch (Exception $e) {
  echo $e->getMessage(); //Boring error messages from anything else!
}
Głównie chodzi mi o kawałek kodu dotyczący załączników. Jak wstawić tam plik pobrany z "<input type="file" /> ?? Nie mogę sobie z tym poradzić. A może jakiś inny sposób na wysłanie mail'a za pomocą formularza html ??
Odnośnik do komentarza
Udostępnij na stronach

Przede wszystkim w tagu form musi być ustawiony atrybut enctype = "multipart/form-data".

Później musisz użyć tablicy $_FILES, a konkretniej $_FILES[<nazwa_pola>]['tmp_name']

Tam przechowywana jest ścieżka do pliku tymczasowego, choć ja radzę najpierw zapisać plik gdzieś w katalogu strony np. uploads za pomocą:

$uploads_dir = 'upload/attachments';
$tmp_name = $_FILES["file"]["tmp_name"];
$name = $_FILES["file"]["name"];
move_uploaded_file($tmp_name, "$uploads_dir/$name");
dzięki temu nazwa pliku będzie taka jak oryginalna

następnie dodać do maila:

$mail->AddAttachment("$uploads_dir/$name"));
i po wysłaniu usuwamy plik:

unlink("$uploads_dir/$name");

Chyba że z jakiś względów chcesz go zachować, ale wtedy trzeba przemyśleć jakiś system, który nie dopuści do nadpisywania.

  • Like 1
Odnośnik do komentarza
Udostępnij na stronach

Nie, no dzięki. Ja to wolę do Ciebie tutaj napisać niż się na innych forach "szlajać", bo zawsze dostanę taką odpowiedź jaką chcę :) Wszystko działa prawidłowo. Mam jeszcze tylko jedno pytanko odnośnie kodu:

  $mail->MsgHTML(file_get_contents('contents.html'));
Czy da się tutaj wstawić czysty tekst zamiast pliku html ?? Pytam bo może miałeś do czynienia z PHP Mailer'em. Chodzi głównie o to, żeby można było ten tekst generować dynamicznie, a plik html daje małe możliwości.
Odnośnik do komentarza
Udostępnij na stronach

Wydaje mi się, że wystarczy wstawić tam kod HTML.

  $mail->MsgHTML("<b>$sername</b><br/>$wiadomosc");
Ale w praktyce lepiej zrobić coś takiego

 $htmlBody="<b>$username</b><br/>";
 $htmlBody.="$wiadomosc<br/>";
foreach($elements as $element)
 $htmlBody.="<div>$element->name $element->decription</div>";
  $mail->MsgHTML($htmlBody);

Jeszcze jest jedna możliwość np. coś takiego

  $mail->MsgHTML("http://domena.pl/mail.php?mail_template_id=$mail_template_id&hash=".md5($user_id.$mail_template_id.'Jakiś stały tekst')."&user_id=$user_id");
Hash jest po to żeby uniemożliwić otwarcie linku generującego mail komuś z zewnątrz. robisz wtedy np. coś takiego w pliku mail.php.

if($_GET['hash']==md5($_GET['user_id'].$_GET['mail_template_id']."Jakiś stały tekst");
{
//generowanie treści maila
}

W ten sposób możesz wykorzystywać bazę do tworzenia szablonów maili, a sam plik może do którego się odwołujesz może includować odpowiednie szablony.

Oczywiście w pliku mail możesz też sprawdzić czy użytkownik a uprawnienia do otwarcia tego pliku. To zabepieczenie które pokazałem jest dość prymitywne :).

Odnośnik do komentarza
Udostępnij na stronach

Gość
Ten temat jest zamknięty i nie można dodawać odpowiedzi.
×
×
  • Dodaj nową pozycję...