Письмо с вложением. Attachment php mail.

← Назад в записки веб-программиста

Письмо с вложением. Attachment php mail.

письмо с вложениемвложенный файлphp mailmail attachment

Рассмотрим рабочий пример отправки письма с вложением(attachment) с помощью функции mail() php. Для отправки обычного письма достаточно указать в функции mail отправителя, получателя, текст письма, кодировку. Чтобы отправить письмо с вложенным файлом, необходимо кроме текст сообщения и адресата указывать путь к необходимому файлу с нужным набором настроек.

Поэтому мы решили разместить заметочку с рабочим кодом отправки письма с вложенным файлом.

Сначала объявляем функцию, которая будет отправлять письмо:


	//функция отправки сообщения с вложенным файлом
	function mail_attachment($filename, $path, $mailto, $from_mail, $from_name, $replyto, $subject, $message) {		
		$file = $path.$filename;
		$file_size = filesize($file);
		$handle = fopen($file, "r");
		$content = fread($handle, $file_size);
		fclose($handle);
		$content = chunk_split(base64_encode($content));
		$uid = md5(uniqid(time()));
		$name = basename($file);
		$header = "From: ".$from_name." <".$from_mail.">\r\n";
		$header .= "Reply-To: ".$replyto."\r\n";
		$header .= "MIME-Version: 1.0\r\n";
		$header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
		$header .= "This is a multi-part message in MIME format.\r\n";
		$header .= "--".$uid."\r\n";
		$header .= "Content-type:text/plain; charset=utf-8\r\n";
		$header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
		$header .= $message."\r\n\r\n";
		$header .= "--".$uid."\r\n";
		$header .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"; // use different content types here
		$header .= "Content-Transfer-Encoding: base64\r\n";
		$header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
		$header .= $content."\r\n\r\n";
		$header .= "--".$uid."--";
		mail($mailto, $subject, "", $header);
	}
	

Теперь задаем массив получателей и прописываем отправителя, текст письма и абсолютный путь к файлу:


	$mails = array('user1@mail.ru','user2@mail.ru');	//массив получателей
	$from="<admin@site.ru>";	//псевдоадрес отправителя

	foreach($mails as $mailsIt){	//отправляем каждому получателю
		$to_mail = $mailsIt;	
		$my_file = 'file.pdf';//название файла
		$my_path = $_SERVER["DOCUMENT_ROOT"].'/files/'; //путь до папки с файлом
		$my_name = $from;
		$my_mail = 'admin@site.ru'; // email отправителя
		$my_replyto = ''; // копия
		$my_subject = 'Тема сообщения';
		$my_message = 'Текст сообщения';
		mail_attachment($my_file, $my_path, $to_mail, $my_mail, $my_name, $my_replyto, $my_subject, $my_message);
	}