Как настроить почтовый ящик для сайта с помощью функции mail

Содержание:

SMTP с авторизацией по протоколу SSL. Введение

Эта статья является продолжением ранее написанной, на тему Отправка писем через SMTP с авторизацией на php. В предыдущей статье я выкладывал исходники класса, который писал для своих нужд, работа которого заключалась в отправке писем через smtp Яндекса. Но статья стала популярной и многие читатели блога, стали присылать вопросы по работе класса. Главной проблемой стала работа через протокол SSL. А в последнее время эта проблема стала возникать еще чаще, поскольку все популярные почтовые сервера перешли на работу по защищенному протоколу SSL. В связи с этим я немного дописал класс, он теперь способен работать и по SSL, обновленную версию можете скачать тут.Обновление 13.03.2018: Класс обновился, подробнее тут: Новая версия класса SendMailSmtpClass

SMTP с авторизацией по протоколу SSL. Майл

// пример использования
require_once "SendMailSmtpClass.php"; // подключаем класс
 
$mailSMTP = new SendMailSmtpClass('ipatovsoft@mail.ru', '****', 'ssl://smtp.mail.ru', 'Evgeniy', 465); // создаем экземпляр класса
// $mailSMTP = new SendMailSmtpClass('логин', 'пароль', 'хост', 'имя отправителя');
 
// заголовок письма
$headers= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=utf-8\r\n"; // кодировка письма
$headers .= "From: Evgeniy <ipatovsoft@mail.ru>\r\n"; // от кого письмо !!! тут e-mail, через который происходит авторизация
$result =  $mailSMTP->send('zhenikipatov@yandex.ru', 'Тема письма', 'Текст письма', $headers); // отправляем письмо
// $result =  $mailSMTP->send('Кому письмо', 'Тема письма', 'Текст письма', 'Заголовки письма');
if($result === true){
    echo "Письмо успешно отправлено";
}else{
    echo "Письмо не отправлено. Ошибка: " . $result;
}

Лирическое отступление

Прежде чем двигаться дальше, давайте немного вспомним теорию. Во-первых, чтобы отправлять письма нам потребуется SMTP-сервер. Но это не проблема, т. к. он есть практически на всех современных платных хостингах. Во-вторых, для приёма писем нам понадобится POP-сервер. В-третьих, следует понимать, что сам по себе PHP не отправляет сообщение, а лишь передаёт команды приложению sendmail — именно оно занимается отправкой, следовательно, его нужно иметь (если используете Денвер, то данное приложение уже встроено). В-четвёртых, все сообщения помещаются в директорию под названием «tmp/!sendmail».

Описание класса

smtp_on( smtp_server, login, password, , )

  • smtp_server: для соединения с smtp по обычному протоколу указывается сервер в обычном формате, например «smtp.mail.ru».
    Для соединения с сервером по защищенному протоколу, например с gmail.com, нужно добавить перед сервером » ssl://», например «ssl://smtp.gmail.com». Так же не забудьте указать порт, для защищенных соединений он обычно 465.
  • login: логин для авторизации через smtp
  • password: пароль для авторизации smtp
  • port: порт для соединения smtp. Если порт стандартный, можно не указывать, по умолчанию 25
  • timeout: таймаут соединения. По умолчанию стоит 5 секунд. Обычно менять не нужно, но если smtp тормозной или ваш конект к серверу длиный, можно увеличить.

Attach( filename, , , )

filename : путь к файлу на диске
new filename : какое имя будет у файла в письме. если ничего не указать, имя файла останется оригинальным.
mimetype : MIME-тип файла. Если не указать, то тип будет ‘application/x-unknown-content-type’.
disposition : команда для почтового клиента, как ему отображать вложение. inline (по умолчанию), при просмотре письма вложение должно отображаться непосредственно в самом теле письма, например картинка

attachment, вложение не будет отображаться в самом письме, оно будет как прикрепленный файл.
Не все почтовые программы обращают внимание на этот параметр.

Как настроить подключение SMTP

Чтобы настроить нормальную отправку писем, нужно установить плагин WP Mail SMTP. Он позволяет переконфигурировать стандартный PHP Mailer так, чтобы была возможность подключаться к SMTP серверу. Также, советую использовать его, если вы пользуетесь локальным сервером.

Настройка WP Mail SMTP

А вот описание опций

  • From Email — email отправителя. Вводим логин от почты полностью как на изображении вверху
  • From Name — Имя отправителя. Можете поставить сюда что хотите, например, адрес вашего сайта
  • Mailer — выбираем
  • Return Path — оставляем пустым
  • SMTP Host — адрес SMTP сервера. Вводим
  • SMTP Port — порт SMTP сервера. Вводим
  • Шифрование— тип шифровки писем. Выбираем
  • Авторизация— авторизация. Выбираем
  • Username — логин от почты. Значение должно совпадать с From Email
  • Password — пароль от почты

Why/When to use the mail PHP

Sending mail using PHP

The PHP mail function has the following basic syntax

<?php
mail($to_email_address,$subject,$message,,);
?>

  HERE,

  • “$to_email_address” is the email address of the mail recipient
  • “$subject” is the email subject
  • “$message” is the message to be sent.
  • “” is optional, it can be used to include information such as CC, BCC
    • CC is the acronym for carbon copy. It’s used when you want to send a copy to an interested person i.e. a complaint email sent to a company can also be sent as CC to the complaints board.
    • BCC is the acronym for blind carbon copy. It is similar to CC. The email addresses included in the BCC section will not be shown to the other recipients.

SMTP с авторизацией по протоколу SSL. Яндекс

Для работы с почтовым сервером Яндекс ни чего не изменилось, единственное, что при вызове класса, необходимо указывать ссылку на хост, работающий через SSL и изменился номер порта: был 25, стал 465. Выглядит код отправки теперь вот так:

// пример использования
require_once "SendMailSmtpClass.php"; // подключаем класс
 
$mailSMTP = new SendMailSmtpClass('zhenikipatov@yandex.ru', '****', 'ssl://smtp.yandex.ru', 'Evgeniy', 465);
// $mailSMTP = new SendMailSmtpClass('логин', 'пароль', 'хост', 'имя отправителя');
 
// заголовок письма
$headers= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=utf-8\r\n"; // кодировка письма
$headers .= "From: Evgeniy <admin@vk-book.ru>\r\n"; // от кого письмо
$result =  $mailSMTP->send('zhenikipatov@yandex.ru', 'Тема письма', 'Текст письма', $headers); // отправляем письмо
// $result =  $mailSMTP->send('Кому письмо', 'Тема письма', 'Текст письма', 'Заголовки письма');
if($result === true){
    echo "Письмо успешно отправлено";
}else{
    echo "Письмо не отправлено. Ошибка: " . $result;
}

Установка и настройка почтового сервера

Установка Postfix

apt-get update && apt-get install postfix

В процессе установки будут заданы вопросы относительно настройки

Важно выбрать тип Internet Site. Это необходимо сделать для того, чтобы Postfix сгенерировал файл и сразу начал работу

В противном случае, Вам необходимо будет настраивать его вручную.

Установка Sendmail

Sendmail устанавливается примерно так же

apt-get update && apt-get install sendmail

Потом его сконфигурировать

sendmailconfig

После всего этого перезагрузить сервер

reboot

Что делать, если email не доходит

  1. Проверить правильность адреса, куда почта должна придти;
  2. Проверить папку Спам;
  3. Выждать пару минут.

Если по истечению времени письмо таки не дошло в почтовый ящик, хотя плагин просигнализировал об успешной отправке сообщения, возможно, хостинг не настроен должным образом.
Возможно, php просто не может отправлять письма.

Как проверить отправку email в PHP

3 команды, которые нужно ввести в консоль SSH последовательно:

php -a
mail ('', "Test Mailer", "Test mail from php mailer");
exit;
  1. Создать файл ;
  2. Прописать туда:
    <?php mail ('', "Test Mailer", "Test mail from php mailer");
  3. Запустить файл командой
    php -f test_email.php

Если на данном этапе возникает ошибка, попробуйте переустановить и правильно сконфигурировать Postfix или Sendmail.

Описание

bool mail (string to, string subject, string message ])

Могут помочь и следующие RFC-документы: RFC 1896,
RFC 2045,
RFC 2046,
RFC 2047,
RFC 2048 и
RFC 2049.

mail() возвращает TRUE, если почта была успешно принята для доставки, FALSE в ином случае.

Важно! Обратите внимание, успешно принято для доставки не подразумевает, что почта фактически достигнет предназначенного назначения

Предупреждение!

Windows-реализация mail() во многом отличается от Unix-реализации. Во-первых, она не использует
локальный экзешник для составления сообщений, а работает лишь по прямым сокетам, что означает, что
MTA должен прослушивать сетевой сокет (который может находиться на локальной или
удалённой машине). Во-вторых, специальные шапки/headers вроде From:, Cc:,
Bcc: и Date: не интерпретируются MTA, а разбираются в PHP.PHP < 4.3 поддерживал только header-элемент Cc: (и был чувствительным к регистру).PHP >= 4.3 поддерживает все элементы шапки и нечувствителен к регистру символов.

Пример 1. Отправка почты.

mail("joecool@example.com", "My Subject", "Line 1\nLine 2\nLine 3");

Если передаётся четвёртый строковой аргумент, эта строка вставляется в
конце шапки/header. Обычно это используют для добавления дополнительных
шапок. Несколько дополнительных шапок разделяются символами carriage return и newline.

Пример 2. отправка почты с дополнительными шапками/header.

mail("nobody@example.com", "the subject", $message,
 "From: webmaster@$SERVER_NAME\r\n"
."Reply-To: webmaster@$SERVER_NAME\r\n"
."X-Mailer: PHP/" . phpversion());

Параметр additional_parameters можно использовать для передачи дополнительных параметров программе,
сконфигурированной для использования при отправке почты установкой конфигурации sendmail_path. Например, это можно применять для установки адреса отправителя при
использовании sendmail. Вам может понадобиться добавить пользователя под
которым работает ваш web-сервер, в вашу sendmail-конфигурацию для
предотвращения добавления шапки ‘X-Warning!’ к сообщению, когда вы
устанавливаете отправителя с использованием этого метода.

Пример 3. Отправка почты с дополнительными шапками/headers и установка
дополнительного параметра командной строки.

mail("nobody@example.com", "the subject", $message,
 "From: webmaster@$SERVER_NAME", "-fwebmaster@$SERVER_NAME");

/* получатели */
$to= «Mary »

«, » ; //обратите внимание на запятую
$to .= «Kelly «;

/* тема/subject */
$subject = «Birthday Reminders for August»;

/* сообщение */
$message = ‘

Birthday Reminders for August

Here are the birthdays upcoming in August!

Person Day Month Year
Joe 3rd August 1970
Sally 17th August 1973

‘;

/* Для отправки HTML-почты вы можете установить шапку Content-type. */
$headers= «MIME-Version: 1.0\r\n»;
$headers .= «Content-type: text/html; charset=utf-8\r\n»;

/* дополнительные шапки */
$headers .= «From: Birthday Reminder \r\n»;
$headers .= «Cc: birthdayarchive@example.com\r\n»;
$headers .= «Bcc: birthdaycheck@example.com\r\n»;

/* и теперь отправим из */
mail($to, $subject, $message, $headers);

Отправка почты через smtp mail ru

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

А чтобы не перестраивать каждый раз локальные сервер, лучше всего настроить разные профили openserver. Как это сделать показано в видеоуроке Openserver настройка php с помощью профилей.

В этом случае достаточно будет просто загрузить профиль и все настройки, которые были указаны для данного профиля будут доступны после перезапуска сервера. Очень удобная штука и работает очень просто.

Для каждого профиля (совсем не важно как он будет называться), должны быть сделаны свои настройки, если конечно планируется использование разных по своим параметрам скриптов, cms-систем и приложений. Если нет, то можно обойтись и настройками по умолчанию

Что касается SMTP mail ru, то здесь все эдентично.

Меняются данные яндекса на данные mail ru

Troubleshooting Common PHP Mail and PHPMailer Errors

Errors can occur from time to time while using PHP mail or PHPMailer. Here’s a list of the most common issues and ways how you can fix them.

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

If you see this warning when testing a PHP mail script, it could mean one of the following:

  • Your SPF record is not enabled. You can find the steps on how to add one here.
  • You’ve sent an email from an address that does not exist or does not belong to you. Make sure to use valid SMTP authentication details.

Mail Goes to the Spam Folder

There are various reasons why a PHP mail can turn up as spam. Here are some of the most common ones:

  • Misleading or spam-like subject. A few examples of that would be “test” or “testing”, “hello“, “urgent” or anything similar. Make sure that you set a clear intent in your message subject.
  • You’re using an incorrect sender address that invokes the security measures to filter your email. This is done as prevention from email spoofing and scams.
  • You are using spam trigger words. This category includes phrases like “great offer” “click here” “special promotion” “this is not spam” and so on. Try changing up your message content to see if that’s the case.
  • Your mailing list does not have an unsubscribe button. When there are a lot of people who report your emails as spam, you will find it difficult to avoid the spam filter. Having an unsubscribe button is a great way to prevent this and invoke more trust from your readers.

Names 4 Brands

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

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

Идём дальше. Мы можем проверить работоспособность, написав простой код и разместив его в корневом каталоге созданного веб-проекта:

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

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

Бизнес модель сервиса Dropbox

Отправка писем через SMTP с помощью PHPMailer на примере Yandex и Google

Можно так же отправить письмо через другой почтовик, например, через Яндекс. Код будет выглядеть примерно так:

// Подключаем библиотеку PHPMailer
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
require 'PHPMailer/PHPMailer.php';
require 'PHPMailer/SMTP.php';

// Создаем письмо
$mail = new PHPMailer();
$mail->isSMTP();                   // Отправка через SMTP
$mail->Host   = 'smtp.yandex.ru';  // Адрес SMTP сервера
$mail->SMTPAuth   = true;          // Enable SMTP authentication
$mail->Username   = 'login';       // ваше имя пользователя (без домена и @)
$mail->Password   = 'password';    // ваш пароль
$mail->SMTPSecure = 'ssl';         // шифрование ssl
$mail->Port   = 465;               // порт подключения

$mail->setFrom('login@ya.ru', 'Иван Иванов');    // от кого
$mail->addAddress('test@ya.ru', 'Вася Петров'); // кому

$mail->Subject = 'Тест';
$mail->msgHTML("<html><body>
                <h1>Здравствуйте!</h1>
                <p>Это тестовое письмо.</p>
                </html></body>");
// Отправляем
if ($mail->send()) {
  echo 'Письмо отправлено!';
} else {
  echo 'Ошибка: ' . $mail->ErrorInfo;
}

Отправка писем через Google имеет один нюанс: нужно в аккаунте google разрешить доступ ненадежным приложениям. Для этого нужно зайти в свой аккаунт https://myaccount.google.com, перейти в безопасность, зайти в раздел «Ненадежные приложения, у которых есть доступ к аккаунту» и там переключить в «Разрешено». На момент написания статьи это страница https://myaccount.google.com/u/0/lesssecureapps.

Дальше в php-программе отправка писем через PHPMailer происходит аналогично как через yandex, нужно только заменить настройки SMTP так:

$mail->Host   = 'smtp.gmail.com';  // Адрес SMTP сервера
$mail->SMTPAuth   = true;          // Enable SMTP authentication
$mail->Username   = 'login';       // ваше имя пользователя
$mail->Password   = 'password';    // ваш пароль
$mail->SMTPSecure = 'ssl';         // шифрование ssl
$mail->Port   = 465;               // порт подключения

Если первый раз запускаете программу отправки через smtp, тогда желательно перед отправкой дополнительно использовать $mail->SMTPDebug = 1; чтобы получать все сообщения клиента и smtp-сервера, т.е. на экран выведется весь процесс подключения, авторизации и т.д., что очень полезно для отладки вашей программы.

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

Давайте посмотрим, как отсылать сообщения, включающие в себя прикреплённый файл. Воспользуемся для этого функцией 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)?Отправлено''Ошибка. Не отправлено!';
?>

Как видите, работа функции mail в PHP совсем несложна. При этом мы рассмотрели лишь наиболее распространённые ошибки, возникающие при её реализации. Впрочем, повысить свои навыки PHP-программирования вы всегда сможете на наших курсах.

Using PHP mail() Function

To use this function, make sure that your hosting provider allows you to manually manage the Sendmail service option.

Having trouble sending mails? PHP mail() is enabled by default on Hostinger.

By default, the Sendmail service is already enabled. Nonetheless, you should double-check it just to be sure.

Creating a Test File for PHP Mail

First of all, you need to create a file for the PHP mail script and place it in the public_html directory so that it can be easily accessed through the domain name.

  1. To access the hPanel, click on the File Manager -> Go to File Manager.
  2. Create a new file by clicking on Add New. Let’s name the file testmail.php and then hit Create.

  3. Double click on the testmail.php since we’re going to edit it using the PHP mail() function. Here’s an example of the basic components of the function we’ll be using in this tutorial. These will be explained in more detail in the next section. For now, click Save & Close when you’re done editing.

  1. Now, you can send an email by accessing YourDomain/testmail.php from the browser. Keep in mind that you must change YourDomain to the domain you’ve used to create testmail.php.
  2. Your target email will receive the message you’ve sent.

Understanding PHP Mail Components

However, if you need more information about the Sendmail function and its components, you can refer to the official PHP documentation.

Here is the PHP syntax we’ve used in the previous section:

<?php
    ini_set( 'display_errors', 1 );
    error_reporting( E_ALL );
    $from = "test@hostinger-tutorials.com";
    $to = "test@hostinger.com";
    $subject = "Checking PHP mail";
    $message = "PHP mail works just fine";
    $headers = "From:" . $from;
    mail($to,$subject,$message, $headers);
    echo "The email message was sent.";
?>

Let’s break it down step-by-step:

ini_set( 'display_errors', 1 );
error_reporting( E_ALL );

These first two lines enable error reporting — they will tell you if the script fails to execute.

$from = "test@hostinger-tutorials.com";
$to = "test@gmail.com";
$subject = "Checking PHP mail";
$message = "PHP mail works just fine";

Here you can compose your message.

$headers = "From:" . $from;

Specifies vital information, such as the sender address, the reply-to location, etc.

mail ($to,$subject,$message,$headers);

This line is used for executing the function.

echo "The email message was sent.";

A message that will appear once the script is executed successfully.

Настройка почты ssmtp для PHP mail()

17 октября 2013, 20:05

Пришлось на днях настраивать почту на тестовом веб-сервере. Нужно это для того, чтобы наше серверное приложение могло отправлять пользователям уведомления на почту. Выделенный настроенный почтовый сервер имеется, поэтому нужно было всего-навсего настроить какой-нибудь MTA на пересылку почты. Так как с админством уже завязал (да и ранее почту под линукс настраивать не приходилось), то пришлось найти несколько готовых варинатов из которых слепил свой. Собственно здесь закладка для себя (вдруг когда-нибудь пригодится).

Сервер на котором выполнялась настройка: Ubuntu 12.04 LTS.

По рекомендациям в интеренете решил установить там простенький МТА — ssmtp:

$ sudo apt-get install ssmtp

Затем нужно отредактировать конфигурационные файлы ssmtp:

sudo nano /etc/ssmtp/ssmtp.conf

12345678910111213141516171819202122232425 # Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=ubuntu
# The place where the mail goes. The actual machine name is required no
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=smtp.remotemailserver.com
# Where will the mail seem to come from?
rewriteDomain=server.com
# The full hostname
hostname=dev.server.com
# Are users allowed to set their own From: address?
# YES — Allow the user to specify their own From: address
# NO — Use the system generated From: address
FromLineOverride=YES
AuthUser=YOUR_MAIL_USER
AuthPass=PASS
UseSTARTTLS=YES

$ sudo nano /etc/ssmtp/revaliases

12345678 # sSMTP aliases
#
# Format:       local_account:outgoing_address:mailhub
#
# Example: root:your_login@your.domain:mailhub.your.domain
# where is an optional port number that defaults to 25.
www-data:support@server.com:smtp.remotemailserver.com
ubuntu:support@server.com:smtp.remotemailserver.com

Правим php.ini

$ sudo nano /etc/php5/apache2/php.ini

Ищем параметр sendmail_path и прописываем в нем путь к ssmtp:

1 sendmail_path = /usr/sbin/ssmtp -t

либо /usr/sbin/sendmail -t

Так как sendmail это ссылка на ssmtp:
lrwxrwxrwx 1 root root 5 Jan 1 2012 /usr/sbin/sendmail -> ssmtp

Не разбирался зачем ключ -t (в мане написано, что он игнорируется ssmtp).

Делаем рестарт апача:

$ sudo service apache2 restart

Код проверки (PHP)

123456789101112 <?php
$to      = ‘myaddress@gmail.com’;
$subject = ‘Test Email’;
$message = ‘Hello Igor’;
$headers = ‘From: Support Team <support@server.com>’ . «\r\n» .
    ‘Reply-To: support@server.com’ . «\r\n» .
    ‘MIME-Version: 1.0’ . «\r\n» .
    ‘Content-Type: text/html; charset=utf-8’ . «\r\n» .
    ‘Content-Transfer-Encoding: quoted-printable’;
mail($to, $subject, $message, $headers);
?>

То есть создаем файл с расширением PHP, например, testmail.php запускаем его из командной строки:

$ php testmail.php

Письмо пришло.

Но из нашего веб приложения письма уходить отказались. 🙁 Смотрел логи, апача, почты, но все свелось к тому, что пришлось все удалить и настроить postfix. С ним все заработало как нужно. По настройке Postfix также нужно будет сделать себе закладочку на всякий случай…

Спасибо за то что поделились ссылкой!

Теги: ПочтаРубрика: Закладки  |   (RSS)

dum

Windows 7 запускается, но показывает только черный экран и указатель мыши

Популярные выражения со словом «стакан»

Функция mail()

Отправка почтовых сообщений в большинстве скриптов выполняется системной функцией . Описание синтаксиса функции mail всегда можно найти в оригинальном руководстве. Эта функция принимает всего 5 параметров, из которых три являются обязательными, а остальные два — опциональными:

  • — Электронный адрес получателя сообщения
  • — Тема сообщения
  • — Тело сообщения
  • — дополнительные заголовки
  • — дополнительные параметры

На самом деле функция просто формирует строку следующего вида:

а затем передает ее на обработку стандартной UNIX’овой команде отправки почты, которая носит имя . Сравнивая то, что выдает , с тем, что должно получиться (см. пример выше), можно составить точный план подготовки переменных для передачи в функцию:

  1. Закодировать поле Subject с использованием base64, как в примере выше.
  2. Закодировать поле To.
  3. В случае необходимости создать , самостоятельно сформировав все необходимые заголовки (например, добавив поле «From:») и разделив эти заголовки парой символов «\r\n».

После этого сформированный набор параметров можно передавать на вход функции mail().

Simple Mail Transmission Protocol (SMTP)

On a hosted server, the SMTP settings would have already been set.

The SMTP mail settings can be configured from “php.ini” file in the PHP installation folder.

Configuring SMTP settings on your localhost Assuming you are using xampp on windows, locate the “php.ini” in the directory “C:\xampp\php”.

Open it using notepad or any text editor. We will use notepad in this example. Click on the edit menu

Click on Find… menu

The find dialog menu will appear

Click on Find Next button

  • Locate the entries
    • ; XAMPP: Don’t remove the semi column if you want to work with an SMTP Server like Mercury
    • ; SMTP = localhost
    • ; smtp_port = 25
    • Remove the semi colons before SMTP and smtp_port and set the SMTP to your smtp server and the port to your smtp port. Your settings should look as follows
      • SMTP = smtp.example.com
      • smtp_port = 25
      • Note the SMTP settings can be gotten from your web hosting providers.
      • If the server requires authentication, then add the following lines.
        • auth_username = This email address is being protected from spambots. You need JavaScript enabled to view it.
        • auth_password = example_password
        • Save the new changes.
        • Restart Apache server.

Php Mail Example

<?php     
$to_email = 'name @ company . com';
$subject = 'Testing PHP Mail';
$message = 'This mail is sent using the PHP mail function';
$headers = 'From: noreply @ company . com';
mail($to_email,$subject,$message,$headers);
?>

Output:

  Note: the above example only takes the 4 mandatory parameters.

Дополнения

19.10.2014 Иван Ткаченко подсказал, что можно расширить возможности класса и отправлять письмо сразу нескольким получателям, за это ему большое спасибо!
Для отправки нескольким получателям через «,» заменить
Это:

fputs($socket, "RCPT TO: \r\n");
    if (!$this->_parseServer($socket, "250")) {
    fclose($socket);
    throw new Exception('Error of command sending: RCPT TO');
}

На это:

$email_to_array = explode(',', $mailTo);
    foreach($email_to_array as $key => $email) {
    $emails = ltrim($email, '');
    fputs($socket, "RCPT TO: <$emails>\r\n");
    if (!$this->_parseServer($socket, "250")) {
        fclose($socket);
        throw new Exception('Error of command sending: RCPT TO');
    }
}

05.08.2016 Сегодня в комментарии подсказали по поводу проблемы с кодировкой, спасибо за это Евгению:
«Для тех у кого в теле и сабже полученного письма кракозябры — проверьте кодировку сервера по умолчанию и кодировку в которой написан сам скрипт. У меня windows-1251 так что прежде чем вызывать метод send использую»

$from_user=iconv("windows-1251", "utf-8" ,$from_user);
$subject =iconv("windows-1251", "utf-8" , $subject);
$message =iconv("windows-1251", "utf-8" , $message);

22.11.2016 Сегодня в комментарий добавили полезный код, который позволяет отправлять, с помощью класса, не только текст, но и файлы. Спасибо большое, за этот код Анжелике. Ниже код:

можно отправлять не только одно письмо но и файлы прикреплять к письму:
// пример использования
require_once «SendMailSmtpClass.php»; // подключаем класс

$mailSMTP = new SendMailSmtpClass(‘xxx@mail.ru’, ‘xxx’, ‘ssl://smtp.mail.ru’, ‘NameSender’, 465); // создаем экземпляр класса
// $mailSMTP = new SendMailSmtpClass(‘логин’, ‘пароль’, ‘хост’, ‘имя отправителя’);

// заголовок письма
$headers= «MIME-Version: 1.0\r\n»;
//$headers .= «Content-type: text/html; charset=utf-8\r\n»; // кодировка письма
//$headers .= «From: Anjelika \r\n»; // от кого письмо !!! тут e-mail, через который происходит авторизация

$subject = «пробуем отправить файл»;
$message =»Сообщение в теле письма при отправке файла»; // текст сообщения, здесь вы можете вставлять таблицы, рисунки, заголовки, оформление цветом и т.п.
$filename = «имя файла например формата.zip»; // название файла
$filepath = «./sending/полный путь к файлу.zip»; // месторасположение файла
//исьмо с вложением состоит из нескольких частей, которые разделяются разделителем
$boundary = «—-«.md5(uniqid(time())); // генерируем разделитель
$headers .= «Content-Type: multipart/mixed; boundary=\»$boundary\»\r\n»; // кодировка письма// разделитель указывается в заголовке в параметре boundary
$headers .= «From: NameSender \r\n»;
$multipart = «—$boundary\r\n»;
$multipart .= «Content-Type: text/html; charset=utf-8\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/zip; name=\»$filename\»\r\n»;
$message_part .= «Content-Disposition: attachment\r\n»;
$message_part .= «Content-Transfer-Encoding: base64\r\n»;
$message_part .= «\r\n»;
$message_part .= chunk_split(base64_encode($file));
$message_part .= «\r\n—$boundary—\r\n»; // второй частью прикрепляем файл, можно прикрепить два и более файла
$multipart .= $message_part;

$result = $mailSMTP->send(‘xxx@xxx.ru’, $subject, $multipart, $headers); // отправляем письмо
// $result = $mailSMTP->send(‘Кому письмо’, ‘Тема письма’, ‘Текст письма’, ‘Заголовки письма’);
if($result === true){
echo «Письмо успешно отправлено»;
}else{
echo «Письмо не отправлено. Ошибка: » . $result;
}

Помещаем HTML и PHP код отправки формы в один файл

Для реализации такой работы нужно поместить HTML код формы в файл send.php и добавить условие, которое будет проверять наличие переменных в массиве POST (этот массив передается из формы). То есть, если переменные в массиве не существуют, то нужно показать пользователю форму. Иначе нужно принять данные из массива и отправить их адресату.

Давайте посмотрим как изменить PHP код в файле send.php:

Существование переменной в POST массиве мы проверяем PHP функцией isset(). Восклицательный знак перед этой функцией в условии означает отрицание. То есть, если переменной не существует, то нужно показать нашу форму. Если бы я не поставил восклицательный знак, то условие дословно означало бы — «если существует, то показать форму». А это неправильно в нашем случае. Естественно, что вы можете переименовать его в index.php. Если будуту переименовывать файл, то не забудьте переименовать название файла и в строке <form action=»send.php» method=»post»>. Форма должна ссылаться на эту же страницу, например index.php. В код я добавил заголовок страницы.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector