[PHP] Wysyłanie maila z załącznikiem


(felixik) #1

Witam, próbuję napisać kod, który będzie wysyłał maila z załącznikiem dołączanym z jednej i tej samej lokalizacji. Problem w tym, że mail dociera, ale bez załącznika. Jakieś pomysły czemu tak jest?

File for Attachment 
$f_name="/home/..../public_html/test/backup_db/".$letter;    // use relative path OR ELSE big headaches. $letter is my file for attaching. 
$handle=fopen($f_name, 'rb'); 
$f_contents=fread($handle, filesize($f_name)); 
$a = var_dump($handle); echo $a; exit;
$f_contents=chunk_split(base64_encode($f_contents));    //Encode The Data For Transition using base64_encode(); 
$f_type=filetype($f_name); 
fclose($handle); 
# To Email Address 
$emailaddress="test@test.pl"; 
# Message Subject 
$emailsubject="Automatyczna kopia bazy danych"; 

# Common Headers 
$headers .= 'From: Administracja <tpdoka@neptun.os.pl>'.$eol; 
$headers .= 'Reply-To: Administracja <tpdoka@neptun.os.pl>'.$eol; 
$headers .= 'Return-Path: Administracja <tpdoka@neptun.os.pl>'.$eol;     // these two to set reply address 
$headers .= "Message-ID:<".$now." TheSystem@".$_SERVER['SERVER_NAME'].">".$eol; 
$headers .= "X-Mailer: PHP v".phpversion().$eol;           // These two to help avoid spam-filters 
# Boundry for marking the split & Multitype Headers 
$mime_boundary=md5(time()); 
$headers .= 'MIME-Version: 1.0'.$eol; 
$headers .= "Content-Type: multipart/related; boundary=\"".$mime_boundary."\"".$eol; 
$msg = ""; 

# Attachment 
$msg = "W dniu $data nast±piło utworzenie kopii bazy danych. Proszę o zachowanie zał±cznika.";   // finish with two eol's for better security. see Injection.

mail($emailaddress, $emailsubject, $msg, $headers);

(awaluk) #2

Skorzystaj z PHPMailera lub SwiftMailera i wysyłaj przez SMTP (najwygodniej). Ręczne ustawianie nagłówków, aby wiadomość się poprawnie wysłała i wszystko dodało nie jest wygodne, a i jak widać same z tym problemy.


(felixik) #3

A jakby to jednak ręcznie zrobić? :slight_smile:


(awaluk) #4

Nie pomogę, niestety nie mam pojęcia. Nigdy nie robiłem tego ręcznie, bo po co się męczyć z nagłówkami.

W sieci jest sporo przykładów, ale nie wiem który może zadziałać. Np. tu https://www.tutdepot.com/php-e-mail-attachment-script/ widzę coś z dodawaniem --ID-- między nagłówkami, ustawianiu znów Content-Type itd. Ewentualnie przeanalizuj kod np. PHPMailera (https://github.com/PHPMailer/PHPMailer/blob/master/src/PHPMailer.php) i pewnie tam znajdziesz na to odpowiedź skoro to działa, ale nadal sądzę że znacznie prościej byłoby go po prostu użyć :slight_smile:


(Fizyda) #5

Mogę tego nie widzieć bo jest 24 a ja jestem po 14 godzinach pracy, ale wskaż mi linijkę w której dodajesz plik do maila bo ja takowej nie znalazłem. Więc obstawiam, że problem jest w braku dodawania pliku do maila.