Что нового

Сеть, интернет Base64php - Отправка E-Mail сообщений с вложениями

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
Версия AutoIt
3.3.8.1
Версия
1.0
Категория: Автоматизация, Сеть, E-Mail

Описание: Данная UDF позволяет отправлять электронные письма с вложениями (или без) с помощью PHP скрипта, расположенного на Вашем сайте.

+ Не требуется настраивать почтовый сервис для исходящих писем;
+ Не требуется: имя или адрес отправителя;
+ Вам не нужно хранить Имя пользователя и Пароль почтового сервиса для отправки письма;
+ Адрес назначения (получателя) знаете только Вы;
+ Идеально подходит для обратной связи конечного пользователя с разработчиком (прямо из Вашего приложения);
- Нет возможности изменить тему письма непосредственно перед отправкой;
- Нет защищенного соединения;
- Требуется наличие сайта для расположения скрипта "base64.php";
- Хостинг-провайдер сайта должен поддерживать отправку E-Mail с сайта.
1. Функция генерирует и отправляет POST-запрос для удаленного скрипта "base64.php";
Скрипт "base64.php" должен располагаться на Вашем сайте в Интернете. Ваш хостинг-провайдер должен поддерживать отправку E-Mail сообщений с сайта.
POST-запрос содержит сл. данные:
• Указанный Вами текст сообщения;
• Имена и содержимое файлов из указанной Вами папки (если папка была указана Вами; путь к папке не передаётся, рекурсия внутри папки не поддерживается);
• Логин и Пароль для Basic-авторизации на сайте (если требуется), где располагается скрипт "base64.php".
2. Скрипт "base64.php" получает текст (тело) письма выполняет загрузку файлов из указанной Вами папки на локальном ПК и отправляет это всё в виде E-Mail на указанный электронный адрес.
1. Зачем это нужно?
• Бывают ситуации, когда SMTP порт блокируется провайдером Интернета. Кто-то не хочет "светить" свой основной E-Mail и Пароль для исходящей отправки писем на свой дополнительный E-Mail. Некоторые не хотят "светить" конечный адрес получателя (свой дополнительный адрес).
2. Как динамически менять E-Mail адрес получателя или Тему письма? Почему так?
• Адрес получателя сообщения хранится в скрипте "base64.php". Сам PHP скрипт должен располагаться на Вашем сайте. Ответ: никак;
• Одна из идей создания данной UDF - обратная связь конечного пользователя с разработчиком. Второстепенная идея - получение на мобильный телефон информации о детекции движения на удалённом объекте;
• Ещё одна причина: почему E-Mail получателя нельзя изменять динамически - я не хотел создавать инструмент для "мамкиных" спамеров.
3. Что делать, если нужно отправлять E-Mail на несколько адресов или с разными Темами?
• Вы - хозяин своего сайта и только Вам решать: сколько копий файла "base64.php" с разными настройками у Вас будет на сайте. К слову, название этого PHP скрипта может быть любым (не обязательно именно "base64").
4. Письмо отправилось (при отправке ошибок нет), но не пришло в почтовый ящик. Почему?
• Вероятнее всего - почтовая система определила его как "Спам". Проверьте указанную папку;
• В некоторых случаях приходится создавать правила обработки входящих писем для хостинг-провайдера, от имени которого отправляется письмо на Вашу (указанную Вами) почту;
• В моём случае я создал правило: все письма от отправителя "noreply@unverified.хостинг.ru" перемещать в отдельную папку. Только после этого я стал стабильно получать уведомления на телефон.
5. Почему используются банальные TCP команды, а не WinHTTP / IE?
• Потому, что это просто и протестировано участниками форума уже не однократно. IE и WinHttp можно "убить" в ОС и далее спокойно жить. А попробуйте убить в Windows протокол TCP? Как Вам без него?
6. Сервер отвечает кодами 301 или 500. Что делать?
• Чаще всего 301 код означает, что в файле ".htaccess" (при его наличии) имеется правило, которое обязывает сервер перенаправлять пользователя на HTTPS, если требуется Basic-авторизация. К сожалению, эта UDF не может работать с HTTPS. Если Вы сможете переписать UDF под HTTPS, то будет круто (дайте знать).
• В моем случае, чтобы победить 301 перенаправление мне пришлось удалить несколько строчек из ".htaccess":
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] RewriteCond %{SERVER_PORT} !^443$
• 500 код ответа сервера Вы можете получить, если неправильно сформируете ".htaccess"
Код:
_Base64php_SendPostMail($sURL, $sMsgText, $sFilesDir="", $iErrorsCol=3, $iSendTimeoutMsec=30000, $sBasicUser="", $sBasicPassword="")

Параметры:
$sURL - Полный URL к скрипту "base64.php" на Вашем сайте
$sMsgText - Текст (тело) письма (HTML не поддерживается)
$sFilesDir - Путь к папке с файлами, которые будут прикреплены к письму в качестве вложения. Не рекомендуется прикреплять файлов, общий размер которых превышает 10 МБ. Вложенные папки не обрабатываются. Значение по умолчанию - "" (пустая строка): не прикреплять файлы.
$iErrorsCol - Число попыток подключения к серверу / получения IP-адреса сервера. Если количество попыток превышено - функция завершится ошибкой @Error. Значение по умолчанию - 3 (3 попытки)
$iSendTimeoutMsec - Таймаут (в миллисекундах), в течении которого ожидается ответ от сервера после отправки запроса. Если ответ не получен, а таймаут истёк - функция завершится ошибкой. Если ответ получен ранее завершения таймаута, то функция продолжает работу. Если значение таймаута слишком маленькое, то скрипт "base64.php" может не успеть отправить письмо. Значение по умолчанию - 30000 (30 секунд)
$sBasicUser и $sBasicPassword -Имя пользователя и Пароль на случай, если для доступа к скрипту "base64.php" включена Basic-авторизация. Значение по умолчанию - "" (пустая строка): Basic-авторизация не используется.


Возврат:
В случае ошибки - "" (пустая строка)
В случае успеха - ответ сервера.

@Error:
0 = Успех;
-1 = Неверный URL: отсутствует протокол
-2 = Неверный URL: отсутствует путь до Base64.php
1 = Не удалось получить IP-адрес сервера
2 = Не удалось подключиться к серверу
3 = Ошибка при отправке POST запроса на сервер
4 = Сервер не вернул ответ


@Extended: Всегда возращает кол-во байт, отправленные серверу.
Код:
$sURL = "https://Site.ru/base64.php"
$sFilesDir = @ScriptDir
$sMsgText = "Текст тестового сообщения"
$iErrorsCol = 3
$sBasicUser = ""
$sBasicPassword = ""
$sAnswer = _Base64php_SendPostMail($sURL, $sMsgText, $sFilesDir, $iErrorsCol, 30000, $sBasicUser, $sBasicPassword)
    If @Error Then
    MsgBox(16, "Send", "Error: "&@Error&@CRLF&"Extended: "&@Extended)
    Else
    MsgBox(64, "Send", "Extended: "&@Extended&@CRLF&@CRLF&"Ответ сервера:"&@CRLF&$sAnswer)
    EndIF
Exit
Информация о тестировании UDF:
Версия AutoIt: 3.3.8.1
ОС: Windows 7 Максимальная x64
Хостинг-провайдер: Бегет
Версия PHP: 5.3
Сайт: Astel064.ru

Оффтоп:
Что произошло с Русскоязычным форумом AutoIt? Где список последних сообщений в темах от пользователей? Зачем нужна была эта модернизация (обновление дизайна), когда ранее всё было ОК? На мой взгляд, этот форум стал отталкивать своих посетителей от ЯП Au3...
Это печально :(
 
Автор
Astel064

Вложения

  • Base64php.zip
    6.8 КБ · Просмотры: 3
Последнее редактирование:
Верх