How to send email from localhost using php

Алан-э-Дейл       10.03.2024 г.

PHPMailer

PHPMailer — полнофункциональный PHP — класс, который выполняет все необходимые задачи по подготовке и рассылке сообщений по электронной почте. В том числе и с использованием SMTP и кодирования сообщений.

Основные зарактеристики:

  • самый популярный способ для отправки электронной почты в PHP
  • используется многими проектами с открытым исходным кодом: WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomlaи др.
  • интегрированная поддержка SMTP — отправка без локального почтового сервера
  • возможность отправлять электронные письма с несколькими TO, CC, BCC и REPLY-TO
  • многостраничные / альтернативные электронные письма для почтовых клиентов, которые не читают HTML-адрес электронной почты
  • поддержка разных кодировок: UTF-8, 8-битных, base64, двоичных и др
  • аутентификация SMTP с помощью механизмов LOGIN, PLAIN, NTLM, CRAM-MD5 и Google XOAUTH2 через SSL и TLS-транспорт
  • сообщения об ошибках на 47 языках (в том числе Русский, Иврит)
  • поддержка подписей DKIM и S / MIME
  • совместимость с PHP 5.0 и более поздними версиями

Многие разработчики PHP используют в своем коде электронную почту. Единственная функция PHP, которая поддерживает — функция mail (). Тем не менее, он не предоставляет никакой возможности для использования популярных функций, таких как электронные письма и вложения на основе HTML.

Правильно форматировать электронную почту достатчно сложно. Существует множество пересекающихся стандартов, протоколов RFC, требующих жесткой привязки к достаточно сложным правилам форматирования и кодирования. Подавляющее большинство программ, которые можно найти в Интернете, использущих PHP — функцию mail () напрямую, содержат большое количество ошибок, так как ата задача сложна. Также не имеет смысла делать то самостоятельно.

Функция PHP mail() обычно использует локальный почтовый сервер, как правило, с помощью бинарного файла sendmail на платформах Linux, BSD и OS X, однако Windows обычно не включает локальный почтовый сервер. Встроенная в PHPMailer SMTP-поддержка  позволяет отправлять электронную почту на любых платформах ( в том числе: Windows) без локального почтового сервера.

Частые ошибки, возникающие при отправке PHP формы с сайта

Первая, наверное самая популярная ошибка, это когда вы видите пустую белую страницу без сообщений. Это означает, что вы допустили ошибку в коде страницы. Вам нужно включить отображение всех ошибок в PHP и тогда вы увидите, где допущена ошибка. Добавьте в код:

Файл send.php должен запускаться только на сервере, иначе код просто не будет работать. Желательно, чтобы это был не локальный сервер, так как он не всегда настроен на отправку данных на внешний почтовый сервер. Если вы запустите код не на сервере, то вам отобразиться код PHP прямо на странице.

Таким образом, для корректной работы я рекомендую поместить файл send.php на хостинг сайта. Там, как правило, все уже настроено.

Еще одна частая ошибка, когда появляется оповещение «Сообщение успешно отправлено», а письмо не приходит на почту. В этом случае нужно внимательно проверить строку:

Некоторые особенности

При работе возникает много нюансов. Они зависят от используемой платформы ОС и других настроек и параметров. Рассмотрим самые основные:

  • При отправке письма заголовок Form нужно задать через необязательный параметр «additional_headers». При его отсутствии может возникнуть ошибка при отправлении;
  • Заголовки разделите символами перевода на новую строку и каретки (\r\n);
  • Длина строки не более семидесяти знаков. Ее регулируйте (\r\n).

Что делать если функция не отправляет письма

Даже с учетом всех перечисленных выше моментов, mail может не работать. При этом на локальном сервере все отправляется как следует. Одной из причин почему так происходит — неправильная настройка функции на хостинге. Поэтому нужно обратиться к конфигурационному файлу php.ini, в котором посмотрите функцию «disable_functions».

Для проверки работоспособности напишите такой несложный код и разместите его в корне созданного интернет-проекта.

<?
print mail("name@my.ru","header","text");
?>

Если все работает правильно, то на экране браузера появится цифра один «1». Ее возвратит «print» после выполнения.

Отправка с вложением

Рассмотрим пример, как отсылать сообщения с прикрепленным файлом. Для этого используется функция sendMailAttachment(). Рассмотрим, как это работает на примере:

<?
$file = "./files/test.txt"; // прописываем путь к файлу, который нужно отправить
$mailTo = "test@gmail.com"; // адрес отправителя
$from = "test@files.com"; // от кого
$subject = "Test file"; // тема
$message = "Текст с вложением"; // контент письма
$r = sendMailAttachment($mailTo, $from, $subject, $message, $file); // отправка письма c вложением
echo ($r)?Отправлено':'Ошибка. Не отправлено!';
//$r = sendMailAttachment($mailTo, $from, $subject, $message); // отправка письма без вложения
//echo ($r)?Отправлено''Ошибка. Не отправлено!';
?>

Проблемы с кодировкой

Иногда сообщения приходят в виде вопросов «?» или непонятных символов. От того насколько правильно оно будет перекодировано, зависит прочтет ли его получатель. При стандартных способах отправки php не учитывает кодировку. На эту тему на моем блоге уже была статья «UTF-8 и Windows 1251». Сам контент сообщения может быть любой кодировки. Вся сложность заключается в заголовке From. По стандарту они должны быть в US-ASCII. Есть две формы кодирования —BASE64 и Quoted-Printable. Первая — более универсальная и работает с UTF-8, поэтому используете ее. Например,

<?
$to = "Адрес куда отправлять";
$from = "От кого";
$subject = "Тема";
$message = '
<html><head>
<title>Привет</title>
</head><body>
Текст
</body></html>';
$headers  = "Content-type: text/html; charset= UTF-8 \r\n";
$headers .= "From: Любой текст <$from>\r\n";
mail($to, $subject, $message, $headers);
?>

При таком варианте заголовки могут быть нечитаемые. Чтобы решить данную проблему напишите заголовок в таком виде:

$subject = '=?UTF-8?B?'.base64_encode('Обратная связь').'?=';

Важно! Используйте исключительно UTF-8. Остались еще вопросы? Рекомендую вам ознакомиться с хорошим курсом Русакова  «Создание движка на PHP и MySQL 2.0»

Изучив его вы не только разберетесь с веб-программированием, но и научитесь писать собственный движок сайта

Остались еще вопросы? Рекомендую вам ознакомиться с хорошим курсом Русакова  «Создание движка на PHP и MySQL 2.0». Изучив его вы не только разберетесь с веб-программированием, но и научитесь писать собственный движок сайта.

Mutt

При возникновении проблем, можно воспользоваться программой mutt. Сначала поставим ее.

а) если используем CentOS / Red Hat:

yum install mutt

б) если используем Ubuntu / Debian:

apt-get install mutt

Теперь можно пользоваться. Синтаксис:

echo «Текст сообщения» | mutt -s «Тема»  — <кому отправить>

Примеры использования Mutt

1. Отправить вложение:

echo «Attachment» | mutt -s «subject» -a /var/log/maillog — master@dmosk.ru

* где /var/log/maillog — файл, который будет прикреплен к письму.

2. Указать отправителя:

echo «Mail From» | mutt -s «subject» -e ‘my_hdr From: Дмитрий <postmaster@dmosk.ru>’ — master@dmosk.ru

* данной командой mutt отправит письмо от postmaster@dmosk.ru.

3. Отправка через другой сервер.

Для начала, открываем файл с конфигурацией Mutt:

vi ~/.muttrc

Добавим:

set smtp_url=»smtp://smtp.mail.ru:25″

* в данном примере мы отправим всю нашу почту через узел smtp.mail.ru, порт 25.

Также можно добавить при необходимости:

set smtp_user = user
set smtp_pass = password
set ssl_verify_host = no
set ssl_verify_dates = no
set ssl_starttls = no
set ssl_force_tls = no

* где:

  • smtp_user — имя учетной записи, под которой нужно авторизоваться на SMTP.
  • smtp_pass — пароль для аутентификации.
  • ssl_verify_host — нужно ли проверять валидность сертификата.
  • ssl_verify_dates — нужно ли проверять дату действия сертификата.
  • ssl_starttls — нужно ли использовать STARTTLS.
  • ssl_force_tls — нужно ли принудительное использование TLS.

Теперь можно отправлять письмо:

echo «Mail From» | mutt -s «subject» -e ‘my_hdr From: Дмитрий <postmaster@dmosk.ru>’ — master@dmosk.ru

Installation

To install MSMTP on Fedora Linux use yum:

yum install msmtp

CentOS repository doesn’t have a RPM package for MSMTP so we need to install it from source:

yum install make gcc pkgconfig
wget http://sourceforge.net/projects/msmtp/files/msmtp/1.4.31/msmtp-1.4.31.tar.bz2/download
tar -xvf msmtp-1.4.31.tar.bz2
cd msmtp-1.4.31
./configure
make
make install

The latest version is 1.4.31 at the time of this writing but it may change in future so to get the latest version, visit this sourceforge page.

On Ubuntu/Debian distribution use apt-get:

apt-get install msmtp

Arch Linux users:

sudo pacman -S msmtp

Длинные строки в письмах («письмо обрезается» итд)

Часто допускаемой ошибкой является создание сообщений с большой длиной строк. Такие сообщения могут доходить в искаженном или обрезанном виде.
Особенно часто это правило нарушается при некорректном создании HTML сообщений — перенос строк там кодируется символами <br>, таким образом,
символы переноса строк в исходном тексте сообщения могут вообще отсутствовать.

Помните, что по MIME и RFC стандартам, которые используются для передачи почтового сообщения, длина строки сообщения не может превышать 80 символов
(ориентировочно). Вам необходимо вставлять переносы строк искусственно, если ваше сообщение содержит длинные строки.

Это относится к кодировке сообщения 8bit, когда тело сообщения передается без кодировки.
В том случае, если тело сообщения кодируется (например, base64), длина итоговых строк может быть любой, но длина строки, используемый для передачи сообщения
(т.е. содержащая данные в base64) опять же не может превышать 80 символов.

Mail send with attachments in PHP step by step:

  • First, we create a simple HTML form with form attribute
  • Creating some HTML input box, textarea and for attachment input
  • Then we start with PHP code to send email with attachment.

Creating HTML Form

1
2
3
4
5
6
7
8
9

<form method=»post»enctype=»multipart/form-data»>

<input type=»text»id=»contact_name»class=»form-control»placeholder=»Name»name=»user_name»>

<input type=»text»id=»contact_email»class=»form-control»placeholder=»Email Address»  

name=»user_mail»>

<textarea id=»contact_message»class=»form-control»rows=»7″placeholder=»Write a

message»name=»user_message»><textarea>

<input name=»attachment»type=»file»>   

<input type=»submit»value=»Send mail»class=»btn btn-primary pull-right»>

<form>

PHP code to send email with attachment

  • First, we post all the data from the HTML Form using function.
  • Also, post the attachment using name attribute of that field.
  • For uploading file input type must have

 <?php
if(isset($_POST) && !empty($_POST)) {
 if(!empty($_FILES)) {
    $file_name = $_FILES;  
    $temp_name = $_FILES;  
    $file_type = $_FILES;

   $base = basename($file_name);

1
2
3
4
5
6
7
8

 <?php

if(isset($_POST)&&!empty($_POST)){

 if(!empty($_FILES’attachment»name’)){

  $file_name=$_FILES’attachment»name’; 
  $temp_name=$_FILES’attachment»tmp_name’; 
  $file_type=$_FILES’attachment»type’;

 
  $base=basename($file_name);

Checking allowed an extension on below code,

$extension = substr($base, strlen($base)-4, strlen($base));

   //only these file types will be allowed
   $allowed_extensions = array(«.doc», «docx», «.pdf», «.zip», «.png»);

1
2
3
4

$extension=substr($base,strlen($base)-4,strlen($base));

 
  //only these file types will be allowed

  $allowed_extensions=array(«.doc»,»docx»,».pdf»,».zip»,».png»);

If the file has satisfy allowed an extensions then go to next step,

//check that this file type is allowed
   if(in_array($extension,$allowed_extensions)) {
       //mail essentials
       $from = $_POST;
       $to = $_POST;
       $subject = $_POST;
       $message = $_POST;

       //things u need
       $file = $temp_name;
       $content = chunk_split(base64_encode(file_get_contents($file)));
       $uid = md5(uniqid(time()));  //unique identifier

       //standard mail headers
       $header = «From: «.$from.»\r\n»;
       $header .= «Reply-To: «.$replyto. «\r\n»;
       $header .= «MIME-Version: 1.0\r\n»;

       //plain txt part

       $header .= «—«.$uid.»\r\n»;
       $header .= «Content-type:text/plain; charset=utf-8\r\n»;
       $header .= «Content-Transfer-Encoding: 7bit\r\n»;
       $header .= $message. «\r\n»;

       //attch part
       $header .= «—«.$uid.»\r\n»;
       $header .= «Content-Type: «.$file_type.»; name=\»».$file_name.»\»\r\n»;
       $header .= «Content-Transfer-Encoding: base64\r\n»;
       $header .= «Content-Disposition: attachment; filename=\»».$file_name.»\»\r\n»;
       $header .= $content.»\r\n»;  //chucked up 64 encoded attch

       if(mail($to, $subject, $message, $header)) {
       echo «success»;
       
       }else {
           echo «fail»;
           echo error_get_last();
       }

   }else {
       echo «file type not allowed»; }    //echo an html file
}else {
  echo «no file posted»; }    
}
?>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56

//check that this file type is allowed
  if(in_array($extension,$allowed_extensions)){

    //mail essentials

    $from=$_POST’user_mail’;

    $to=$_POST’user_mail’;

    $subject=$_POST’user_name’;

    $message=$_POST’user_message’;

 
    //things u need

    $file=$temp_name;

    $content=chunk_split(base64_encode(file_get_contents($file)));

    $uid=md5(uniqid(time())); //unique identifier

 
    //standard mail headers

    $header=»From: «.$from.»\r\n»;

    $header.=»Reply-To: «.$replyto.»\r\n»;

    $header.=»MIME-Version: 1.0\r\n»;

 
 
    //declare multiple kinds of email (plain text + attch)

    $header.=»Content-Type: multipart/mixed; boundary=\»».$uid.»\»\r\n»;

    $header.=»This is a multi-part message in MIME format.\r\n»;

 
    //plain txt part

 
    $header.=»—«.$uid.»\r\n»;

    $header.=»Content-type:text/plain; charset=utf-8\r\n»;

    $header.=»Content-Transfer-Encoding: 7bit\r\n»;

    $header.=$message.»\r\n»;

 
 
    //attch part

    $header.=»—«.$uid.»\r\n»;

    $header.=»Content-Type: «.$file_type.»; name=\»».$file_name.»\»\r\n»;

    $header.=»Content-Transfer-Encoding: base64\r\n»;

    $header.=»Content-Disposition: attachment; filename=\»».$file_name.»\»\r\n»;

    $header.=$content.»\r\n»; //chucked up 64 encoded attch

 
 
    //sending the mail — message is not here, but in the header in a multi part

 
    if(mail($to,$subject,$message,$header)){

    echo»success»;

    
    }else{

      echo»fail»;

      echo error_get_last()’message’;

    }

 
 
  }else{

    echo»file type not allowed»;}  //echo an html file

}else{

 echo»no file posted»;}  
}

?>

Примеры использования командной строки для email-отправки

1. Отправка письма с вложением

Для разных типов дистрибутива Linux команды могут отличаться.

а) для CentOS / Red Hat:

echo ‘Attachment’ | mail -s ‘Subject attachment message’ -a /var/log/maillog master@dmosk.ru

б) для Ubuntu:

echo ‘Attachment’ | mail -s ‘Subject attachment message’ -a /var/log/maillog -a /var/log/maillog2 master@dmosk.ru

… или:

echo ‘Attachment’ | mail -s ‘Subject attachment message’ -A /var/log/maillog -A /var/log/maillog2 master@dmosk.ru

* где /var/log/maillog и /var/log/maillog2 — файлы, которые будут прикреплены к письму

Обратите внимание, что обе команды отличаются по регистру опции a и A — все зависит от версии и сборки Linux (в каких-то нужно использовать маленькую, в каких-то — большую). Также обратите внимание, что в примере для Ubuntu мы отправим 2 файла — для этого просто добавляем к команде еще одну опцию прикрепления файла

2. Несколько получателей

Для отправки письма нескольким получателям, просто перечисляем их через запятую:

echo «Test text» | mail -s «Test title» master@dmosk.ru,shmaster@dmosk.ru

* в данном примере мы отправил письмо на ящики master@dmosk.ru и shmaster@dmosk.ru.

3. Отправка с копией

Отправить копию на адрес master2@dmosk.ru:

echo «Test copy» | mail -s «Test copy title» master@dmosk.ru -c master2@dmosk.ru

Отправить скрытую копию на адрес master3@dmosk.ru:

echo «Test hidden copy» | mail -s «Test hidden copy title» master@dmosk.ru -b master3@dmosk.ru

4. Указать отправителя

В CentOS / Red Hat:

echo «Test text» | mail -s «Test title» -r postmaster@dmosk.ru master@dmosk.ru

В Debian / Ubuntu:

echo «Test text» | mail -s «Test title» master@dmosk.ru -aFrom:postmaster@dmosk.ru

5. Отправка через другой SMTP сервер

а) Для Ubuntu / Debian:

echo «Test text» | mail -s «Test title» -a «Smtp: smtp.mail.ru:25» -a «From: postmaster@dmosk.ru» -a «Return-path: postmaster@dmosk.ru» master@dmosk.ru

б) Для CentOS / Red Hat:

echo «Test text» | mail -s «Test title» -S smtp=»smtp.mail.ru:25″ master@dmosk.ru

Однако, если сторонний почтовый сервер работает по шифрованному каналу и требует аутентификацию, необходимо ввести следующее:

echo «Test text» | mail -v -s «Test title» -S smtp=»smtp.dmosk.ru:587″ -S smtp-use-starttls -S smtp-auth=login -S smtp-auth-user=»master@dmosk.ru» -S smtp-auth-password=»password» -S ssl-verify=ignore -S nss-config-dir=/etc/pki/nssdb -S from=postmaster@dmosk.ru master@dmosk.ru

* где smtp.dmosk.ru — сервер smtp; 587 — порт для подключения к серверу отправки; smtp-use-starttls указывает на использование шифрования через TLS; smtp-auth=login задает аутентификацию с использованием логина и пароля; smtp-auth-user и smtp-auth-password — соответственно логин и пароль; ssl-verify=ignore отключает проверку подлинности сертификата безопасности; nss-config-dir указывает на каталог с базами nss; from задает поле FROM

Send Mail attachments with PHP code (Complete Source code)

<?php

 if(isset($_POST) && !empty($_POST)) {
 if(!empty($_FILES)) {
    $file_name = $_FILES;  
    $temp_name = $_FILES;  
    $file_type = $_FILES;

   $base = basename($file_name);
   $extension = substr($base, strlen($base)-4, strlen($base));

   //only these file types will be allowed
   $allowed_extensions = array(«.doc», «docx», «.pdf», «.zip», «.png»);

   //check that this file type is allowed
   if(in_array($extension,$allowed_extensions)) {
       //mail essentials
       $from = $_POST;
       $to = «phpcodertech@gmail.com»;
       $subject = $_POST;
       $message = $_POST;

       //things u need
       $file = $temp_name;
       $content = chunk_split(base64_encode(file_get_contents($file)));
       $uid = md5(uniqid(time()));  //unique identifier

       //standard mail headers
       $header = «From: «.$from.»\r\n»;
       $header .= «Reply-To: «.$replyto. «\r\n»;
       $header .= «MIME-Version: 1.0\r\n»;

       //plain txt part

       $header .= «—«.$uid.»\r\n»;
       $header .= «Content-type:text/plain; charset=utf-8\r\n»;
       $header .= «Content-Transfer-Encoding: 7bit\r\n»;
       $header .= $message. «\r\n»;

       //attch part
       $header .= «—«.$uid.»\r\n»;
       $header .= «Content-Type: «.$file_type.»; name=\»».$file_name.»\»\r\n»;
       $header .= «Content-Transfer-Encoding: base64\r\n»;
       $header .= «Content-Disposition: attachment; filename=\»».$file_name.»\»\r\n»;
       $header .= $content.»\r\n»;  //chucked up 64 encoded attch

       if(mail($to, $subject, $message, $header)) {
       echo «success»;
       
       }else {
           echo «fail»;
           echo error_get_last();
       }

   }else {
       echo «file type not allowed»; }    //echo an html file
}else {
  echo «no file posted»; }    
}
?>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80

<?php
 
 if(isset($_POST)&&!empty($_POST)){

 if(!empty($_FILES’attachment»name’)){

  $file_name=$_FILES’attachment»name’; 
  $temp_name=$_FILES’attachment»tmp_name’; 
  $file_type=$_FILES’attachment»type’;

 
  $base=basename($file_name);

  $extension=substr($base,strlen($base)-4,strlen($base));

 
  //only these file types will be allowed

  $allowed_extensions=array(«.doc»,»docx»,».pdf»,».zip»,».png»);

 
  //check that this file type is allowed

  if(in_array($extension,$allowed_extensions)){

    //mail essentials

    $from=$_POST’user_mail’;

    $to=»phpcodertech@gmail.com»;

    $subject=$_POST’user_name’;

    $message=$_POST’user_message’;

 
    //things u need

    $file=$temp_name;

    $content=chunk_split(base64_encode(file_get_contents($file)));

    $uid=md5(uniqid(time())); //unique identifier

 
    //standard mail headers

    $header=»From: «.$from.»\r\n»;

    $header.=»Reply-To: «.$replyto.»\r\n»;

    $header.=»MIME-Version: 1.0\r\n»;

 
 
    //declare multiple kinds of email (plain text + attch)

    $header.=»Content-Type: multipart/mixed; boundary=\»».$uid.»\»\r\n»;

    $header.=»This is a multi-part message in MIME format.\r\n»;

 
    //plain txt part

 
    $header.=»—«.$uid.»\r\n»;

    $header.=»Content-type:text/plain; charset=utf-8\r\n»;

    $header.=»Content-Transfer-Encoding: 7bit\r\n»;

    $header.=$message.»\r\n»;

 
 
    //attch part

    $header.=»—«.$uid.»\r\n»;

    $header.=»Content-Type: «.$file_type.»; name=\»».$file_name.»\»\r\n»;

    $header.=»Content-Transfer-Encoding: base64\r\n»;

    $header.=»Content-Disposition: attachment; filename=\»».$file_name.»\»\r\n»;

    $header.=$content.»\r\n»; //chucked up 64 encoded attch

 
 
    //sending the mail — message is not here, but in the header in a multi part

 
    if(mail($to,$subject,$message,$header)){

    echo»success»;

    
    }else{

      echo»fail»;

      echoerror_get_last()’message’;

    }

 
 
  }else{

    echo»file type not allowed»;}  //echo an html file

}else{

 echo»no file posted»;}  
}
?>
 

<form method=»post»enctype=»multipart/form-data»>

<input type=»text»id=»contact_name»class=»form-control»placeholder=»Name»name=»user_name»>

<input type=»text»id=»contact_email»class=»form-control»placeholder=»Email Address»  

name=»user_mail»>

<textarea id=»contact_message»class=»form-control»rows=»7″placeholder=»Write a

message»name=»user_message»><textarea>

<input name=»attachment»type=»file»>   

<input type=»submit»value=»Send mail»class=»btn btn-primary pull-right»>

<form>

Please comment below if any issue. Here is the complete source with live view for Send Mail Attachments with PHP Mail() function.

Also check officially on PHP https://www.php.net/manual/en/function.mail.php

Happy Coding..!

Создаём файл конфигурации

Создадим файл send.php с таким содержанием

Здесь вам нужно отредактировать эти поля под себя:

// Формирование самого письма$title = "Заголовок письма";$body = "Само письмо"// Настройки вашей почты$mail->Host       = 'smtp.yandex.ru'; // SMTP сервера вашей почты$mail->Username   = 'your_login'; // Логин на почте$mail->Password   = 'password'; // Пароль на почте$mail->SMTPSecure = 'ssl';$mail->Port       = 465;// Адрес самой почты и имя отправителя$mail->setFrom('mail@yandex.ru', 'Имя отправителя');// Получатель письма$mail->addAddress('youremail@yandex.ru');  $mail->addAddress('youremail@gmail.com'); // Ещё один, если нужен

About PHPMailer

PHPMailer Features

At the time this tutorial was written, here is a list of features currently available:

  • Can send emails with multiple TOs, CCs, BCCs and REPLY-TOs
  • Redundant SMTP servers
  • Multipart/alternative emails for mail clients that do not read HTML email
  • Support for 8bit, base64, binary, and quoted-printable encoding
  • Uses the same methods as the very popular AspEmail active server (COM) component
  • SMTP authentication
  • Word wrap
  • Address reset functions
  • HTML email
  • Tested on multiple SMTP servers: Sendmail, qmail, Postfix, Imail, Exchange, Mercury, Courier
  • Works on any win32 or *nix platform
  • Flexible debugging
  • Custom mail headers
  • Multiple fs, string, and binary attachments (those from database, string, etc)
  • Embedded image support

PHPMailer Contributors

The following contributors to PHPMailer are:

  • Brent R. Matzelle
  • Patrice Fournier
  • Chris Ryan
  • Cem Hurturk
  • Tom Klingenberg
  • Jaime Bozza

I give these folks great respect for what they have done to speed up my development time on various projects in the past, including PHPFreaks.com!

Here is the stuff needed to do:

1.Install and Configure IIS with PHP

First of all, install and configure PHP 5 as described in the PHP documentation. Try to avoid the windows based binary installer. Download the full package and install it manually.

2. Test out PHP Pages

Once you’ve done with the installation. Test it out with a sample PHP info page. If PHP is able to execute the pages on the server then we are ready for the next step.

4. Configure PHP.INI for SMTP

Let’s stop IIS from the IIS Manager. Now open your PHP.INI file. It could be on your folder or folder. Depends on how you’ve configured IIS and PHP on your system. Once you’ve opened the PHP.INI file with notepad or something, search for the entry called “” and set it as below.

Save and close the PHP.INI file.

5. Configure IIS SMTP Relay Restrictions

on the properties page move to “ Access ” tab and click on “ Connection ” and you will be able to see which servers/IP’s are allowed to make a connection to the server. If “ 127.0.0.1 ” IP is not there on the list, add it using the “ Add ” button, additionally, you may also insert your server IP on the list.

Once you are done with the “Relay Restrictions” window, click ok to accept the options and then click “Apply” and “Ok” buttons respectively to go back to the main screen of IIS Manager. Now you can restart IIS from the IIS manager.

How to Troubleshoot Common PHP Mail and PHPMailer Errors

In the following sections, we’ll go over some of the most common issues that might occur when using the PHP mail() function or PHPMailer and how to fix them.

This error means that the server was unable to authenticate the sender using the provided details.

Gmail Couldn’t Verify That YourDomain.com Sent This Message

If you see this warning when testing a PHP mail script, the reason might be one of the following:

  • There is no SPF record in the domain’s DNS Zone. If the record is missing, or you’re using external nameservers, add a new SPF TXT record manually on your hPanel or cPanel.
  • You used invalid SMTP authentication details. Make sure to use an email address that exists and belongs to you.

Mail Goes to the Spam Folder

There are various reasons why PHP mail might trigger spam filters. Some of the most common ones are:

  • Misleading or spam-like subject. A couple of examples include “test” or “urgent.” Be sure to set a clear intent in the subject.
  • Incorrect sender address. This can invoke the security measures to filter your email as a prevention against email spoofing and scams.
  • Using spam trigger words. This includes phrases like “great offer” and “this is not spam.” Try changing the content of your message to see if this is the problem.
  • The mailing list doesn’t have an unsubscribe button. Make sure to include an unsubscribe button to prevent this issue and build reader trust.
Гость форума
От: admin

Эта тема закрыта для публикации ответов.