Скрипт отправки mail на php

Отправка писем через SMTP в PHPMailer

В последнее время письма отправляемые с хостингов через функции mail() и mb_send_mail() часто попадают в спам или совсем не доходят до адресатов. Альтернатива – это отправка e-mail через SMTP с реального почтового ящика.

use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require_once '/PHPMailer/src/Exception.php'; require_once '/PHPMailer/src/PHPMailer.php'; require_once '/PHPMailer/src/SMTP.php'; // Для более ранних версий PHPMailer //require_once '/PHPMailer/PHPMailerAutoload.php'; $mail = new PHPMailer; $mail->CharSet = 'UTF-8'; // Настройки SMTP $mail->isSMTP(); $mail->SMTPAuth = true; $mail->SMTPDebug = 0; $mail->Host = 'ssl://smtp.gmail.com'; $mail->Port = 465; $mail->Username = 'Логин'; $mail->Password = 'Пароль'; // От кого $mail->setFrom('mail@snipp.ru', 'Snipp.ru'); // Кому $mail->addAddress('mail@site.com', 'Иван Петров'); // Тема письма $mail->Subject = $subject; // Тело письма $body = '

«Hello, world!»

'; $mail->msgHTML($body); // Приложение $mail->addAttachment(__DIR__ . '/image.jpg'); $mail->send();

Если при отправки писем возникает ошибка « Could not connect to SMTP host », то необходимо добавить следующие строки:

$mail->SMTPOptions = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ) );

Яндекс Почта

$mail->Host = 'ssl://smtp.yandex.ru'; $mail->Port = 465; $mail->Username = 'Логин@yandex.ru'; $mail->Password = 'Пароль';

В настройках почты нужно разрешить доступ к почтовому ящику с помощью почтовых клиентов:

Разрешить доступ к почтовому ящику с помощью почтовых клиентов в Яндекс почте

Mail.ru

$mail->Host = 'ssl://smtp.mail.ru'; $mail->Port = 465; $mail->Username = 'Логин@mail.ru'; $mail->Password = 'Пароль';

Gmail

$mail->Host = 'ssl://smtp.gmail.com'; $mail->Port = 465; $mail->Username = 'Логин@gmail.com'; $mail->Password = 'Пароль';

Если возникает ошибка при отправки почты, то нужно отключить двухфакторную авторизацию и разблокировать «ненадежные приложения» в настройках конфиденциальности аккаунта https://myaccount.google.com/security?pli=1

Отключить двухфакторную авторизацию Gmail

Разблокировать «ненадежные приложения» в настройках Gmail

Рамблер

$mail->Host = 'ssl://smtp.rambler.ru'; $mail->Port = 465; $mail->Username = 'Логин@rambler.ru'; $mail->Password = 'Пароль';

iCloud

$mail->Host = 'ssl://smtp.mail.me.com'; $mail->Port = 587; $mail->Username = 'Логин@icloud.com'; $mail->Password = 'Пароль';

Мастерхост

$mail->Host = 'ssl://smtp.masterhost.ru'; $mail->Port = 465; $mail->Username = 'Логин@домен.ru'; $mail->Password = 'Пароль';

Timeweb

$mail->Host = 'ssl://smtp.timeweb.ru'; $mail->Port = 465; $mail->Username = 'Логин@домен.ru'; $mail->Password = 'Пароль';

Хостинг Центр (hc.ru)

Доступ к сторонним почтовым серверам по SMTP-портам (25, 465, 587) ограничен, разрешена отправка не более 300 сообщений в сутки.

$mail->Host = 'smtp.домен.ru'; $mail->SMTPSecure = 'TLS'; $mail->Port = 25; $mail->Username = 'Логин@домен.ru'; $mail->Password = 'Пароль';

REG.RU

$mail->Host = 'ssl://serverXXX.hosting.reg.ru'; $mail->Port = 465; $mail->Username = 'Логин@домен.ru'; $mail->Password = 'Пароль';

Имя сервера на reg.ru

Имя сервера на reg.ru

ДЖИНО

У jino.ru нужно включить опцию «SMTP-сервер»

$mail->Host = 'ssl://smtp.jino.ru'; $mail->Port = 465; $mail->Username = 'Логин@домен.ru'; $mail->Password = 'Пароль';

nic.ru

$mail->Host = 'ssl://mail.nic.ru'; $mail->Port = 465; $mail->Username = 'Логин@домен.ru'; $mail->Password = 'Пароль';

Бегет — beget.com

$mail->Host = 'ssl://smtp.beget.com'; $mail->Port = 465; $mail->Username = 'Логин@домен.ru'; $mail->Password = 'Пароль';

Спринтхост — sprinthost.ru

$mail->Host = 'ssl://smtp.ВАШ_ДОМЕН'; $mail->Port = 465; $mail->Username = 'Логин@домен.ru'; $mail->Password = 'Пароль';

Источник

Читайте также:  Create and import package in java

Отправка почты средствами 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); >// удаление файла 

Источник

Читайте также:  Java save file to home directory

Отправка писем на php. Сборник рецептов

Отправка писем в html формате почти ничем не отличается от отправки писем в текстовом формате. В заголовке вы указываете формат письма text/html а в самом письме вместо обычного текста помещаете html-код.


Если вы это читаете значит все ок

Почтовый робот "; // текст сообщения, здесь вы можете вставлять таблицы, рисунки, заголовки, оформление цветом и т.п. $mailheaders = "Content-type:text/html;charset=windows-1251rn"; // формат письма html $mailheaders .= "From: SiteRobot rn"; $mailheaders .= "Reply-To: noreply@siterobot.rurn"; // емайл отправителя и емайл для ответа mail($to, $subject, $message, $mailheaders); // отправляем письмо ?>

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

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

rn"; $mailheaders .= "Reply-To: noreply@siterobot.rurn"; $multipart = "--$boundaryn"; $multipart .= "Content-Type: text/plain; charset=windows-1251nn"; $multipart .= "$messagenn"; // первая часть само сообщение $fp = fopen($filepath,"r"); if (!$fp) < print "Файл не может быть прочитан"; exit(); >$file = fread($fp, filesize($filepath)); fclose($fp); // чтение файла $message_part = "--$boundaryn"; $message_part .= "Content-Type: application/octet-stream; name = "".$filename.""n"; $message_part .= "Content-Transfer-Encoding: base64n"; $message_part .= "Content-Disposition: attachment; filename = "".$filename.""nn"; $message_part .= chunk_split(base64_encode($file))."n"; // второй частью прикрепляем файл, можно прикрепить два и более файла $multipart .= $message_part; mail($to,$subject,$multipart,$mailheaders); // отправляем письмо ?>

Отправка писем сразу нескольким адресатам

Чтобы отправить письмо сразу нескольким адресатам, лучше всего использовать заголовок Bcc: который отправляет копию письма на указанный емайл

rn"; $mailheaders .= "Reply-To: noreply@siterobot.rurn"; // почтовые заголовки $mailheaders .= "Bcc: email1@mail.rurn"; $mailheaders .= "Bcc: email2@mail.rurn"; $mailheaders .= "Bcc: email3@mail.rurn"; // заголовков Bcc может быть неограниченное количество mail($to, $subject, $message, $mailheaders); // отправляем письмо ?>

Подборка курсов по PHP

4.4 GeekBrains еще 1 курс

4.4 Skillbox еще 3 курса

4.2 Оtus

4.4 HTML Academy

Читайте также:  Check files in directory java

4.5 Hexlet

4.4 Нетология

Комментарии

Всем привет. Помогите разобраться. Я новичок в HTML — сильно не пинайте. Скачал LadingPage шаблон на html и переделал под себя, а вот проблема в том что не отправляются письма как положено через формы. На сайте есть несколько форма. 1) Заказать звонок и 2) Заказать воду. Во 2 форме есть подпункты город,время и т.д. Но при оправке на почту приходить только текст «Заказ на доставку воды», а нужно что бы и телефон и все остальное приходило. Создал файл mail.php и прописал вот такой код
$to = ‘МОЯ ПОЧТА’;
$from = ’email@yandex.ru’;
$subject = ‘Заказ воды на сайте Water24Hours’;
$subject = ‘=?utf-8?b?’. base64_encode($subject ) .’?=’;
$headers = ‘Content-type: text/plain; charset=»utf-8″‘;
$headers .= «From: «. $from .» rn»;
$message = ‘Заказ на доставку воды’;
$headers .= «Date: «. date(‘D, d M Y h:i:s O’) .»rn»;
mail($to, $subject, $message, $headers, ‘-f’. $from );
?>
И в файле script.js вот такой код
$(function() $(‘#square’).keyup(function() var square = $(this).val();
$(‘#price’).val(square*1100)
>);
$(‘#price’).keyup(function() var price = $(this).val();
$(‘#square’).val((price/1100).toFixed(2))
>);

$(‘.ask-blocks .item h4’).click(function() var thisH4 = $(this),
thisSpan = $(‘div’, $(this).parent()),
outherH4 = $(‘.ask-blocks .item h4’).not(thisH4),
outherSpan = $(‘.ask-blocks .item div’).not(thisSpan);
outherH4.removeClass(‘active’);
outherSpan.hide().removeClass(‘active’);
thisH4.toggleClass(‘active’);
thisSpan.fadeToggle().toggleClass(‘active’);
>);
ymaps.ready(init);
var myMap,
myPlacemark;

function init() if( ($(window).width() <= 767) ) myMap = new ymaps.Map("map", center: [55.75399400, 37.62209300],
zoom: 8
>);
> else myMap = new ymaps.Map(«map», center: [55.75399400, 37.62209300],
zoom: 8
>);
>

myPlacemark = new ymaps.Placemark([55.75399400, 37.62209300], hintContent: ‘Алматы’,
balloonContent: ‘г. Алматы, пр. Достык, д. 291/3’
>);
myMap.geoObjects.add(myPlacemark);
>
$(‘.up’).click(function(e) e.preventDefault();
$(‘html,body’).animate( scrollTop: 0
>, 1000);
>);
$(«input.tel»).click(function() $(this).val(‘+7’);
>);
$(window).scroll(function() var pos = 86;
if( ($(window).width() = 768) ) pos = 150;
>
if( ($(window).width() = 576) ) pos = 150;
>
if($(window).width() <= 575) pos = 290;
>

if($(this).scrollTop() >= pos) $(‘nav’).addClass(‘stickytop’);
>
else $(‘nav’).removeClass(‘stickytop’);
>
>);
$(‘.smoothScroll’).click(function(event) event.preventDefault();
var href=$(this).attr(‘href’);
var target=$(href);
var top=target.offset().top;
$(‘html,body’).animate( scrollTop: top
>, 1000);
>);

$(‘.modal’).on(‘hidden.bs.modal’, function (e) $(‘input:not(.type)’, $(this)).val(»);
>);
$(‘form’).submit(function(e) e.preventDefault();
var form_data = ‘name’:$(«.name», $(this)).val(),
‘tel’:$(«.tel», $(this)).val(),
‘price’:$(«#price», $(this)).val(),
‘square’:$(«#square», $(this)).val(),
‘type’:$(«.type», $(this)).val()
>;
$.ajax( type: «POST»,
url: «mail.php»,
data: form_data,
success: function() $(‘.modal’).modal(‘hide’);
setTimeout(function() $(‘.success’).fadeToggle();
>, 1000);
setTimeout(function() $(‘.success’).fadeToggle();
>, 2500);
>,
error: function() alert(«Произошла какая то ошибка!»);
>
>);
>);
new WOW().init();
>);
Подскажите что сделал не правильно. Всем спасибо!

Источник

Оцените статью