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!"); }} |