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

Содержание:

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

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

Отправка писем через 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-сервера, т.е. на экран выведется весь процесс подключения, авторизации и т.д., что очень полезно для отладки вашей программы.

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

Формат почтового сообщения

Для того чтобы быть уверенным, что ваше сообщение отправляется действительно верно, необходимо иметь по меньшей мере базовые представления о формате почтового сообщения. Формат почтового сообщения описан в нескольких стандартизирующих документах, основными из которых являются RFC 822 (описывает формат передачи простого текста на английском языке) и RFC 2045 (описывает расширения этого формата для передачи произвольных данных).

Ниже приведен самый простой пример текстового сообщения, составленного в соответствии с приведенными выше стандартами и готового к отправке:

Именно в таком формате клиент для отправки почты (MS Outlook, TheBat! или Mozilla Thunderbird) подготавливает сообщение, а затем отправляет его получателю (кстати, большинство почтовых клиентов позволяют просмотреть исходный код сообщения, в Mozilla Thunderbird, например, для этого служит комбинация клавиш ). Задача нашего скрипта на языке PHP — добиться точно такого же формата письма.

Как видно из приведенного выше примера, электронное письмо содержит две части: в одной (верхней) размещаются заголовки, а в другой (нижней), собственно, текст письма. Отделены эти части друг от друга пустой строкой. Заголовки состоят из строк, в которых содержится тема письма (Subject), имя и адрес отправителя (From), получателя (To) и другая информация. В самом простом случае каждая строка содержит пару «ИмяЗаголовка: ЗначениеЗаголовка». Особенно необходимо подчеркнуть, что, согласно стандартам, в заголовках ни при каких обстоятельствах не должны содержаться русские символы.

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

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

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

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

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

Что делать, если не приходят письма через mail PHP

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

Sanitizing email user inputs

Let’s assume you have to create a contact us form for users fill in the details and then submit.

  • Users can accidently or intentional inject code in the headers which can result in sending spam mail
  • To protect your system from such attacks, you can create a custom function that sanitizes and validates the values before the mail is sent.

Filter_var function The filter_var function is used to sanitize and validate the user input data.

It has the following basic syntax.

<?php
filter_var($field, SANITIZATION TYPE);
?>

  HERE,

  • “filter_var(…)” is the validation and sanitization function
  • “$field” is the value of the field to be filtered.
  • “SANITIZATION TYPE” is the type of sanitization to be performed on the field such as;
    • FILTER_VALIDATE_EMAIL – it returns true for valid email addresses and false for invalid email addresses.
    •  FILTER_SANITIZE_EMAIL – it removes illegal characters from email addresses. info\@domain.(com) returns This email address is being protected from spambots. You need JavaScript enabled to view it..
    • FILTER_SANITIZE_URL – it removes illegal characters from URLs. http://www.example@.comé returns >http://www.example@.com
    • FILTER_SANITIZE_STRING  — it removes tags from string values. <b>am bold</b> becomes am bold.
<?php 
function sanitize_my_email($field) {
    $field = filter_var($field, FILTER_SANITIZE_EMAIL);
    if (filter_var($field, FILTER_VALIDATE_EMAIL)) {
        return true;
    } else {
        return false;
    }
}
$to_email = 'name @ company . com';
$subject = 'Testing PHP Mail';
$message = 'This mail is sent using the PHP mail ';
$headers = 'From: noreply @ company. com';
//check if the email address is invalid $secure_check
$secure_check = sanitize_my_email($to_email);
if ($secure_check == false) {
    echo "Invalid input";
} else { //send email 
    mail($to_email, $subject, $message, $headers);
    echo "This email is sent using PHP Mail";
}
?>

Output:

Настройка конфигурации Windows

В операционной системе Windows необходимо задать в файле php.ini значения двух переменных:

SMTP

Строка, содержащая имя DNS или IP-адрес сервера SMTP, который перенаправляет почту, получаемую от компьютера под управлением Windows, на котором установлена система PHP. Если сервер SMTP находится на том же компьютере, где установлена система PHP, то в качестве значения параметра SMTP необходимо указать localhost.

sendmail_from

Строка, содержащая адрес электронной почты, применяемого по умолчанию отправителя почты PHP (например, mailbot@example.com).

В программное обеспечение сервера IIS4 и последующих версий встроен сервер SMTP, который обладает меньшим набором функций, чем Exchange Server. С этим сервером SMTP удобнее работать, если вам не требуется вся мощь программы Exchange Server.

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 mail ru

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

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

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

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

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

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

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

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

Настройка почты 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)

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

Установка 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.

Грамотное использование русских символов в заголовках почтового сообщения

Итак, в явном виде русский текст в заголовке присутствовать не должен, поэтому для того чтобы включить его туда, этот текст предварительно нужно закодировать. Стандарты описывают способ кодирования «запрещенных» символов. Общий формат выглядит так:

Кодировка может быть любой из списка «windows-1251», «koi8-r», «utf-8» и т.д. Во всех случаях, как правило, кодировка сообщения будет совпадать с кодировкой, в которой работает сайт. То есть в большинстве случаев это будет «windows-1251», реже — «utf-8».

Способ кодирования указывает на то, каким именно образом русские символы будут преобразованы в безопасный набор. Способа определяется два: так называемый «Q-encoding» (обозначается одной буквой «Q») и «Base64» (обозначается одной буквой «B»).

К сожалению, штатной функции, которая могла бы обычную строку преобразовать в Q-encoded текст, в PHP нет, зато есть функция, которая умеет выполнять аналогичное преобразование в Base64. Итак, PHP код правильного создания заголовка темы почтового сообщения может выглядеть следующим образом:

Здесь предполагается, что в переменной у Вас содержится тема почтового сообщения, записанная по-русски в кодировке windows-1251.

Отправка почты через smtp яндекса

Почта будет приходить на любой адрес, который будет указан в скрипте вместо значения ‘to’, но обрабатывать и отправлять эту почту будет именно тот SMTP, который будет указан в настройках openserver.

  1. Запускаем сервер
  2. Открываем модуль openserver с настройками в меню «почта»
  3. Заполняем все поля как показано на картинке, при этом, имя пользователя, e-mail отправителя и пароль подставляем от реального почтового ящика на яндексе.

Сохраняем настройки и после того, как сервер будет перезапущен, можно обратиться к самому скрипту. Из папки «Мои сайты», открыть папку «send» в которой и находится сохраненный ранее скрипт index.php.

К стати, данный скрипт можно сохранить под любым именем, главное чтобы расширение скрипта было «php»

Как только произойдет обращение к данному скрипту, в новом окне браузера появится информация о том, что скрипт отработал.

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

Если его нет, значит что-то настроено не правильно, либо письмо попало в папку спам.

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

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

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

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

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

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

Дополнения

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;
}

Почему Windows 10 выходит из сна, как устранить такую самостоятельность

В первую очередь (логично) узнать кто или что являлось причиной включения ноутбука/компьютера. Об этом можно узнать, есть открыть  журналы Windows (современная ОС многие свои действия записывает в журнал, в том числе, время включения/выключения).

И так, чтобы открыть этот журнал, необходимо сначала  зайти в панель управления Windows в раздел «Система и безопасность», далее перейти во вкладку «Администрирование» (см. скрин ниже ).

Система и безопасность, Администрирование

После чего открыть ссылку «Просмотр событий».

Просмотр событий (во вкладке администрирование)

Здесь нужно в меню слева выбрать «Журналы Windows/Система».

Далее перед вами должны предстать сотни событий (по умолчанию они отсортированы по дате появления)

Нам нужно посмотреть те, в графе которых «Источник» содержится причина «Power-Troubleshooter» (также обратите внимание на время выхода. Благодаря этому, сможете найти нужное событие)

Когда откроете событие — увидите источник выхода. По сути, это и есть причина, почему ваш ноутбук/ПК пробудился.

Источник выхода — расширяемый хост-контроллер Intel(R) USB 3.0

Например, если в источнике выхода содержится «Кнопка питания» — значит кто-то вывел ноутбук из режима сна с помощью этой кнопки.

Еще один пример // Источник выхода — кнопка питания

Возможные варианты в источнике выхода:

  1. кнопка питания — под это иногда подпадает не только непосредственно сама кнопка, но и открытие/закрытие крышки ноутбука. Добавлю, что возможно сбои в тех случаях, когда у вас проблема с мат. платой или с самой кнопкой;
  2. устройство, название которого содержит «HID» — это либо мышка, либо клавиатура, либо еще что-то подобное (джойстик, например). Отмечу, что часто эти устройства могут срабатывать «автоматически»: хватит даже совсем небольшой вибрации вашей мышки (например, если положите что-то на стол с ней);
  3. таймеры — обычно подобное происходит, если у вас в планировщике заданий установлена какая-то задача (например, обновить систему!);
  4. сетевой адаптер — этот источник выхода говорит о том, что ваш адаптер настроен так, чтобы ПК пробуждался при подключениях к нему;
  5. хост-контроллеры (вариантов названий может быть много) — причина обычно в подключенных устройствах к USB портам;
  6. нет данных — самый неприятный источник выхода, который также встречается в журнале. В этом случае порекомендую все равно проделать нижеперечисленные рекомендации (в большинстве случаев помогает решить проблему).

Как найти и запретить устройствам выходить из режима сна

Для того, чтобы увидеть все устройства, которым разрешено будить ноутбук/компьютер, откройте  командную строку (нажмите сочетание Win+R, введите команду cmd и нажмите Enter).

В командной строке введите одну команду: powercfg -devicequery wake_armed 

В моем случае нашлось одно оборудование — HID-совместимая мышь.

HID-совместимая мышь будит ПК

Далее нужно открыть  диспетчер устройств (Win+R, затем команду devmgmt.msc).

В диспетчере устройств найдите то устройство, которому хотите запретить пробуждать ПК (в моем случае HID-совместимая мышь). Щелкните по нему правой кнопкой мышки и выберите свойства.

Свойства HID-совместимой мышки // Диспетчер устройств

В свойствах во вкладке «Управление электропитанием» снимите галочку с разрешения выводить компьютер из ждущего режима. Сохраните настройки, и на этом, вообще-то всё, дальше можно пользоваться компьютером спокойно…

Снимаем галочку с разрешения будить

Добавлю, если у вас несколько устройств — можете поочередно также запретить им всем выводить ПК/ноутбук из ждущего (спящего) режима. Тогда в итоге вы сможете сделать так, что ваш ноутбук будет выходить из него только с помощью кнопки питания.

Как отключить таймеры пробуждения (чтобы никакое обновление или проверка не могла включить ПК)

Для этого необходимо зайти в настройки электропитания (панель управления, затем раздел «Оборудование и звук/Электропитание /Настройки схемы электропитания (текущей схемы!)»).

Далее откройте дополнительные настройки электропитания (см. скрин ниже).

Изменить доп. параметры питания

В них необходимо открыть вкладку «Сон/Разрешить таймеры пробуждения» и поставить значения «Отключить» (см. скрин ниже ). Сохраните настройки и перезагрузите ПК.

Отключаем таймеры пробуждения

Теперь при уходе в спящий режим — никакой планировщик заданий не должен будить ваше устройство!

Также, на всякий случай, откройте панель управления Windows по следующему адресу:

Проверьте, не стоит ли там галочка, разрешающая пробуждать ПК на автоматическое обслуживание в запланированное время (снимите ее, если эта опция у вас включена).

Автоматическое обслуживание

Кстати, поздравляю всех с 23 февраля!

На этом пока всё. Всем всего хорошего!

Первая публикация: 23.02.2018

Корректировка: 5.06.2020

Names 4 Brands

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

Отправка писем через функцию mail() с помощью PHPMailer

Если вы хотите отправлять письма со своего хостинга через свой почтовый сервер, то всё довольно просто и будет выглядеть примерно так:

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

// Создаем письмо
$mail = new PHPMailer();
$mail->setFrom('test@domain.ru', 'Иван Иванов'); // от кого (email и имя)
$mail->addAddress('test@ya.ru', 'Вася Петров');  // кому (email и имя)
$mail->Subject = 'Тест';                         // тема письма
// html текст письма
$mail->msgHTML("<html><body>
                <h1>Здравствуйте!</h1>
                <p>Это тестовое письмо.</p>
                </html></body>");
// Отправляем
if ($mail->send()) {
  echo 'Письмо отправлено!';
} else {
  echo 'Ошибка: ' . $mail->ErrorInfo;
}  

Как видим, всё довольно просто: подключаем библиотеку, заполняем от кого, кому, тему и текст письма и отправляем. Отправка писем таким способом будет работать только с почтовых адресов вашего домена (если только они не привязаны к другим почтовикам).

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;
}

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

Функция mail()

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

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

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

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

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

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

dum

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

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

Adblock
detector