- smtp_connect - Коннект к серверу smtp
- smtp_auth - авторизация
- smtp_send - отправка письма
- smtp_quit - закрытие соединения
На самом деле, этот плагин ни что иное как прошлый урок, по результатам которого можно было бы написать собственный такой плагин, до Дядька Романыч позаботился о нас. По этому я расскажу только как применять эти функции, а тем кому интересно более детально узнать как работает плагин, сам изучит исходник. Который в конце данной статьи приложен.
И так для работы нам потребуется:
- Плагин Amx Mail v 0.1.0
- Инклуд amxmail ( в комплекте с плагином)
- Нами написанный мини пример
Будем считать что все файлы находятся в нужных местах. Приступим к написанию примера, который будет отправлять на определенный электронный адрес письмо с определенным содержанием, ну скажем с именем сервера и текущей картой при его старте.
Давайте подумаем как вы отправляете письмо другу? Скорее всего так:
- Заходите на страничку вашей почтовой системы или открываете программу клиент. ( то етсь соединяетесь с сервером)
- Далее вводится логин и пароль ( авторизация на сервере)
- Написание и отправка письма
- Закрытие странички или программы (закрытие соединения)
Будущий плагин будет делать все тоже самое в той же самой последовательности. Не правда ли все просто?
Начнем с коннекта к серверу:
/*
* Подключиться к SMTP серверу
*
* server - адрес сервера
* port - порт сервера
*
* В случае успеха функция вернёт идентификатор сервера,
* его надо использовать в первом параметре остальных функций
*
* В случае неудачи возвращает -1
*
*/
native smtp_connect(server[], port);
В описании функции и так все предельно понятно, но на всякий случай поясню что данные настройки вы можете посмотреть в справочных материалах ваших почтовых служб, вот пример Хелп mail.ru
Из которого следует что адрес сервера smtp.mail.ru и нужный нам порт SMTP — 25, 587 или 2525 ( любой на выбор )
Далее следует авторизация:
/*
* Авторизация на SMTP сервере
*
* socket - идентификатор сервера
* username - имя пользователя (Например username@mail.ru)
* password - пароль
*
*/
native smtp_auth(socket, username[], password[]);
Обратите внимание, что первая функция возвращает идентификатор сокет соединения соединения, который будет первым аргументов функции.
Логин и пароль указываются точно такими же как вы привыкли входить в свою почту.
Наконец подошли к самой отправке письма:
/*
* Отправить письмо
*
* socket - идентификатор сервера
* from - от кого письмо (для большинства серверов должно совпадать с именем пользователя)
* to - кому письмо
* subject - тема письма
* mail - содержимое письма
* addHeaders - дополнительные заголовки (Например Reply-To:)
*
*/
native smtp_send(socket, from[], to[], subject[], mail[], addHeaders[]);
Функция не поддерживает форматирование, по этому передаваемые данные необходимо подготовить заранее, например с помощью функции format
После успешной отправки ( а может и не отправки) необходимо закрыть открытое соединение с сервером:
/*
* Отключиться от сервера
*
* socket - идентификатор сервера
*/
native smtp_quit(socket);
Теоретически разобрались, посмотрим как это будет выглядеть в коде:
#include <amxmodx>
#include <amxmisc>
#include <amxmail>
#define PLUGIN "[http://amxxmodx.ru] Send Mail"
#define VERSION "1.0"
#define AUTHOR "Admin"
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
set_task(5.0,"send",0)
}
public send(){
//Подготавливаем текст для письма
new text[1024],MapName[32],ServerName[32]
get_user_name(0,ServerName,31)
get_mapname(MapName,31)
format(text,charsmax(text),"Hello Admin! From server:%s , map in server [%s]",ServerName,MapName)
new connect // Создаем переменную для хранения идентификатора соединения
connect = smtp_connect("smtp.mail.ru",587)//Соедиенние и получение идентификатора
if(connect != -1){// Проверяем что соединение установлено
smtp_auth(connect,"login","pass")// Авторизация
smtp_send(connect,"TVOI@mail.ru","KOMY@list.ru","TeMa: Server start",text,"To:")//Отправка письма
smtp_quit(connect)//Закрытие соединения
}else{
server_print("ERROR Connect to SMTP")
}
}
Вот тут: "TVOI@mail.ru","KOMY@list.ru"
Можете ввести свой почтовый адрес в двух местах, и тогда получится что вы пришлете письмо самому себе.
Надеюсь теперь вы понимаете как использовать данный плагин. Ах да, функция set_task там необходимо для того, что бы плагин amx_mail точно успел загрузиться. ( мало ли он у вас ниже в списке плагинов окажется)
Теперь исходный код плагина amx_mail:
Тут я уже раскоментировал строчку что бы в консоль сервера шли логи действий плагина, это даст вам возможность более подробно изучить процесс работы плагина. Но для полного понимания вам конечно же необходимо прочитать материалы о работе email.
Рекомендую прочитать эту статью: PHP Email
И содержание инклуда amxmail:
#if defined AMX_MAIL_INCLUDED
#endinput
#endif
#define AMX_MAIL_INCLUDED
#if AMXX_VERSION_NUM >= 175
#pragma reqlib amxmail
#if !defined AMXMODX_NOAUTOLOAD
#pragma loadlib amxmail
#endif
#else
#pragma library amxmail
#endif
native smtp_connect(server[], port);
native smtp_auth(socket, username[], password[]);
native smtp_send(socket, from[], to[], subject[], mail[], addHeaders[]);
native smtp_quit(socket);
Источник плагина:amxmodx.su
Надеюсь теперь вы всегда будите получат необходимые уведомления с вашего сервера.