Отправка почты средствами PHP
Работая над проектом, мне пришлось создать специфичную «анкету соискателя» в котором надо была отправлять всю анкету на указные за ране e-mail адрес, и я сразу же вспомнил про PHP функцию mail().
bool mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]])
- E-mail получателя
- Заголовок письма
- Текст письма
- Дополнительные заголовки письма
- Дополнительные параметры командной строки
- true, если письмо было принято к доставке
- false, в противном случае.
Простейший пример
Перейдем к более сложному примеру
Текст письма 1-ая строчка 2-ая строчка '; $headers = "Content-type: text/html; charset=windows-1251 \r\n"; $headers . ; $headers .= "Reply-To: reply-to@example.com\r\n"; mail($to, $subject, $message, $headers); ?>
В начале мы определяем кому адресовано письмо, за это отвечает переменная &to, если же получателей несколько человек, то записываем через запятую адреса эл. почты.
Переменные $subject и $message, не буду описывать, это и так понятно.
- В первой строчке ми определяем ты отправляемого письма-HTML и кодировку windows-1251.
- В 2-ом мы указываем от кого пришло письмо.
- В 3-ем указываем e-mail адрес, для ответа на письмо.
А теперь самое интересное отправка письма c вложением (attachment)
$subject = "тема письма"; $message ="Текст сообщения"; // текст сообщения, здесь вы можете вставлять таблицы, рисунки, заголовки, оформление цветом и т.п. $filename = "file.doc"; // название файла $filepath = "files/file.doc"; // месторасположение файла //исьмо с вложением состоит из нескольких частей, которые разделяются разделителем $boundary = "--".md5(uniqid(time())); // генерируем разделитель $mailheaders = "MIME-Version: 1.0;\r\n"; $mailheaders .="Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n"; // разделитель указывается в заголовке в параметре boundary $mailheaders . ; $mailheaders .= "Reply-To: $user_email\r\n"; $multipart = "--$boundary\r\n"; $multipart .= "Content-Type: text/html; charset=windows-1251\r\n"; $multipart .= "Content-Transfer-Encoding: base64\r\n"; $multipart .= \r\n; $multipart .= chunk_split(base64_encode(iconv("utf8", "windows-1251", $message))); // первая часть само сообщение // Закачиваем файл $fp = fopen($filepath,"r"); if (!$fp) < print "Не удается открыть файл22"; exit(); >$file = fread($fp, filesize($filepath)); fclose($fp); // чтение файла $message_part = "\r\n--$boundary\r\n"; $message_part .= "Content-Type: application/octet-stream; name=\"$filename\"\r\n"; $message_part .= "Content-Transfer-Encoding: base64\r\n"; $message_part .= "Content-Disposition: attachment; filename=\"$filename\"\r\n"; $message_part .= \r\n; $message_part .= chunk_split(base64_encode($file)); $message_part .= "\r\n--$boundary--\r\n"; // второй частью прикрепляем файл, можно прикрепить два и более файла $multipart .= $message_part; mail($to,$subject,$multipart,$mailheaders); // отправляем письмо //удаляем файлы через 60 сек. if (time_nanosleep(5, 0)) < unlink($filepath); >// удаление файла
PHP | Send Attachment With Email
Sending an email is a very common activity in a web browser. For example, sending an email when a new user joins a network, sending a newsletter, sending greeting mail, or sending an invoice. We can use the built-in mail() function to send an email programmatically. This function needs three required arguments that hold the information about the recipient, the subject of the message and the message body. Along with these three required arguments, there are two more arguments which are optional. One of them is the header and the other one is parameters.
We have already discussed sending text-based emails in PHP in our previous article. In this article, we will see how we can send an email with attachments using the Mime-Versionmail() function.
When the mail() function is called PHP will attempt to send the mail immediately to the recipient then it will return true upon successful delivery of the mail and false if an error occurs.
Syntax:
bool mail( $to, $subject, $message, $headers, $parameters );
Here is the description of each parameter.
Name | Description | Required/Optional | Type |
---|---|---|---|
to | This contains the receiver or receivers of the particular email | Required | String |
subject | This contains the subject of the email. This parameter cannot contain any newline characters | Required | String |
message | This contains the message to be sent. Each line should be separated with an LF (\n). Lines should not exceed 70 characters (We will use wordwrap() function to achieve this.) | Required | String |
headers | This contains additional headers, like From, Cc, Mime Version, and Bcc. | Optional | String |
parameters | Specifies an additional parameter to the send mail program | Optional | String |
When we are sending mail through PHP, all content in the message will be treated as simple text only. If we put any HTML tag inside the message body, it will not be formatted as HTML syntax. HTML tag will be displayed as simple text.
To format any HTML tag according to HTML syntax, we can specify the MIME (Multipurpose Internet Mail Extension) version, content type and character set of the message body.
To send an attachment along with the email, we need to set the Content-type as mixed/multipart and we have to define the text and attachment sections within a Boundary.
Approach: Make sure you have a XAMPP server or WAMP server installed on your machine. In this article, we will be using the WAMP server.
Follow the steps given below:
Create an HTML form: Below is the HTML source code for the HTML form. In the HTML tag, we are using “enctype=’multipart/form-data” which is an encoding type that allows files to be sent through a POST method. Without this encoding, the files cannot be sent through the POST method. We must use this enctype if you want to allow users to upload a file through a form.
HTML Form to Email with Attachment using PHP
Our goal is to create an HTML form with a file field, when someone clicks the submit button we want to receive the data with attachment in our email.
Before we started to this everyone for the big support my HTML form to PHP mail post. As per my subscriber’s request, I made this new tutorial. to send any attachment via HTML form to the email we can use phpmail function. here is am giving an example of how to do it.
Create form for html to email with attachments
First create an HTML form with enctype=”multipart/form-data” because we are transferring files .
this is just a HTML boilerplate. you can add your class and modify with your website design.
Now we have to create our PHP file which will process the data when the form submit.
Here we are getting the data from the form and making a message string and encoding the uploaded attachment into base64 format and send it to your email address,
When the email hit your inbox it will decode the base64 object and display the attachment
mail.php file
[email protected]’; //if u dont have an email create one on your cpanel $mailto = ‘[email protected]’; //the email which u want to recv this email $content = file_get_contents($fileName); $content = chunk_split(base64_encode($content)); // a random hash will be necessary to send mixed content $separator = md5(time()); // carriage return type (RFC) $eol = «\r\n»; // main header (multipart mandatory) $headers = «From: «.$fromname.» » . $eol; $headers .= «MIME-Version: 1.0» . $eol; $headers .= «Content-Type: multipart/mixed; boundary=\»» . $separator . «\»» . $eol; $headers .= «Content-Transfer-Encoding: 7bit» . $eol; $headers .= «This is a MIME encoded message.» . $eol; // message $body = «—» . $separator . $eol; $body .= «Content-Type: text/plain; charset=\»iso-8859-1\»» . $eol; $body .= «Content-Transfer-Encoding: 8bit» . $eol; $body .= $message . $eol; // attachment $body .= «—» . $separator . $eol; $body .= «Content-Type: application/octet-stream; name=\»» . $filenameee . «\»» . $eol; $body .= «Content-Transfer-Encoding: base64» . $eol; $body .= «Content-Disposition: attachment» . $eol; $body .= $content . $eol; $body .= «—» . $separator . «—«; //SEND Mail if (mail($mailto, $subject, $body, $headers)) < echo "mail send . OK"; // do what you want after sending the email >elseImportant Notes :
- This will not work in your desktop or Localhost
- You have to host it in a server to make it work.
- Some free hosting providers not allow you to send emails from your website (eg : 000webhost)
- Sometimes you have to add a valid from email address to work with this
- Maximum file size is 25 , if you are attaching bigger files, it may not work. anyway its depend on your server provider.
Check out the video for more details and to know how to implement html to email with attachments
Download Source Code :
If you are still having doubts about how to work with HTML to email with attachments forms you can check out my Youtube video explaining everything in detail.