PHP | Отправить вложение по электронной почте
Отправка электронной почты - очень распространенное действие в веб-браузере. Например, отправка электронного письма, когда новый пользователь присоединяется к сети, отправка информационного бюллетеня, отправка приветственного письма, отправка счета-фактуры. Мы можем использовать встроенную функцию mail () для программной отправки электронной почты. Для этой функции требуются три обязательных аргумента, которые содержат информацию о получателе, теме сообщения и теле сообщения. Наряду с этими тремя обязательными аргументами есть еще два необязательных аргумента. Один из них - заголовок, другой - параметры.
Мы уже обсуждали отправку текстовых электронных писем на PHP в нашей предыдущей статье. В этой статье мы увидим, как можно отправить электронное письмо с вложениями с помощью функции mail ().
Когда вызывается функция mail (), PHP попытается отправить письмо немедленно получателю, тогда он вернет true при успешной доставке почты и false при возникновении ошибки.
Синтаксис :
bool mail ($ to, $ subject, $ message, $ headers, $ parameters);
Вот описание каждого параметра.
Имя | Описание | Обязательный / необязательный | Тип |
---|---|---|---|
к | Он содержит получателя или получателей конкретного электронного письма. | Необходимый | Нить |
тема | Это содержит тему электронного письма. Этот параметр не может содержать символы новой строки. | Необходимый | Нить |
сообщение | Он содержит сообщение, которое нужно отправить. Каждую строку следует разделять знаком LF ( n). Строки не должны превышать 70 символов (для этого мы будем использовать функцию wordwrap ().) | Необходимый | Нить |
заголовки | Это содержит дополнительные заголовки, такие как From, Cc, Mime Version, Bcc. | По желанию | Нить |
параметры | Задает дополнительный параметр для программы отправки почты | По желанию | Нить |
Когда мы отправляем письмо через PHP, все содержимое сообщения будет рассматриваться только как простой текст. Если мы поместим какой-либо тег HTML в тело сообщения, он не будет отформатирован как синтаксис HTML. HTML-тег будет отображаться как простой текст.
Чтобы отформатировать любой тег HTML в соответствии с синтаксисом HTML, мы можем указать версию MIME (многоцелевое расширение почты Интернета), тип содержимого и набор символов тела сообщения.
Чтобы отправить вложение вместе с электронным письмом, нам нужно установить Content-type как смешанный / составной, и мы должны определить разделы текста и вложения в пределах границы .
Create an HTML form:
< form enctype = "multipart/form-data" method = "POST" action = "" > < label >Your Name < input type = "text" name = "sender_name" /> </ label > < label >Your Email < input type = "email" name = "sender_email" /> </ label > < label >Subject < input type = "text" name = "subject" /> </ label > < label >Message < textarea name = "message" ></ textarea > </ label > < label >Attachment < input type = "file" name = "attachment" /></ label > < label >< input type = "submit" name = "button" value = "Submit" /></ label > </ form > |
PHP Script for handling the form data:
if ( $_POST [ "button" ] && isset( $_FILES [ "attachment" ])) { $from_email = "sender@abc.com" ; //from mail, sender email addrress $recipient_email = "recipient@xyz.com" ; //recipient email addrress //Load POST data from HTML form $sender_name = $_POST [ "sender_name" ] //sender name $reply_to_email = $_POST [ "sender_email" ] //sender email, it will be used in "reply-to" header $subject = $_POST [ "subject" ] //subject for the email $message = $_POST [ "message" ] //body of the email /*Always remember to validate the form fields like this if(strlen($sender_name)<1) { die("Name is too short or empty!"); } */ //Get uploaded file data using $_FILES array $tmp_name = $_FILES [ "my_file" ][ "tmp_name" ]; // get the temporary file name of the file on the server $name = $_FILES [ "my_file" ][ "name" ]; // get the name of the file $size = $_FILES [ "my_file" ][ "size" ]; // get size of the file for size validation $type = $_FILES [ "my_file" ][ "type" ]; // get type of the file $error = $_FILES [ "my_file" ][ "error" ]; // get the error (if any) //validate form field for attaching the file if ( $file_error > 0) { die ( "Upload error or No files uploaded" ); } //read from the uploaded file & base64_encode content $handle = fopen ( $tmp_name , "r" ); // set the file handle only for reading the file $content = fread ( $handle , $size ); // reading the file fclose( $handle ); // close upon completion $encoded_content = chunk_split ( base64_encode ( $content )); $boundary = md5( "random" ); // define boundary with a md5 hashed value //header $headers = "MIME-Version: 1.0
" ; // Defining the MIME version $headers .= "From:" . $from_email . "
" ; // Sender Email $headers .= "Reply-To: " . $reply_to_email . "
" ; // Email addrress to reach back $headers .= "Content-Type: multipart/mixed;
" ; // Defining Content-Type $headers .= "boundary = $boundary
" ; //Defining the Boundary //plain text $body = "--$boundary
" ; $body .= "Content-Type: text/plain; charset=ISO-8859-1
" ; $body .= "Content-Transfer-Encoding: base64
" ; $body .= chunk_split ( base64_encode ( $message )); //attachment $body .= "--$boundary
" ; $body .= "Content-Type: $file_type; name=" . $file_name . "
" ; $body .= "Content-Disposition: attachment; filename=" . $file_name . "
" ; $body .= "Content-Transfer-Encoding: base64
" ; $body .= "X-Attachment-Id: " .rand(1000, 99999). "
" ; $body .= $encoded_content ; // Attaching the encoded file with email $sentMailResult = mail( $recipient_email , $subject , $body , $headers ); if ( $sentMailResult ) { echo "File Sent Successfully." ; unlink( $name ); // delete the file after attachment sent. } else { die ("Sorry but the email could not be sent. Please go back and try again!"); } } |