<?php
/**
* @package Dolotov
* @subpackage Email
* @copyright Лиецнзия (C) 2007 Алексей Долотов и всё.
* @license Все права принадлежат Алексею Долотову, reg (пёсик) dolotov.com.
* @author Alexey Dolotov <post (пёсик) dolotov.com>
* @description Модуль отправки e-mail сообщений
*/
// Настройки существующего почтового ящика, с которого будут отправляться письма.
// Желательно, чтобы ящик находился на этом же сервере для повышения скорости работы.
// Раскомментирование закомментированных переменных ничего не даст. Сейчас они жестко заданы в классе mailSend
$nmSmtpFrom = 'manager@a25.ru'; // Адрес отправителя
$nmSmtpFromName = 'Служба уведомлений'; // Имя отправителя
$nmSmtpServer = 'mail.a25.ru'; // Адрес SMTP сервера (mail.example.com) или же IP адрес непосредственно
//$nmSmtpPort = '25'; // По умолчанию 25
//$nmSmtpTimeout = '30'; // Время ожидания реакции от сервера. Если недостаточно, попробуйте 45
$nmSmtpUsername = 'manager@a25.ru'; // логин для SMTP-авторизации
$nmSmtpPassword = 'qazws'; // Пароль для smtp
//$nmSmtpLocalhost = "127.0.0.1"; // Кто я такой. Вроде бы, всегда работает с 127.0.0.1
//$nmNewLine = "\r\n"; // Определение символа новой строки
//$nmSmtpSecure = 0; // 1 если требуется именно безопасное соединение. Обычно - 0
/**
* Класс отправки сообщений через SMTP.
* @subpackage Email
* @package Dolotov
*/
class mailSend {
// Ассоциативный массив результатов выполнения последней отправки сообщения
private $_log = array();
// Текущий статус объекта
// 0 - объект не создан еще
// 1 - создан, готов к работе
// 2 - отправляет сообщение
private $_status = 0;
// Код ошибки, если таковая была. Иначе 0
private $_errNum = 0;
// Текст ошибки, если таковая была.
private $_errText = '';
// Порт, через который происходит соединение с SMTP сервером
public $_port = 25;
// Время ожидания реакции от сервера. Если недостаточно, попробуйте 45
public $_timeout = 30;
// Определение символа новой строки
public $_line = "\r\n";
// 1 если требуется именно безопасное соединение. Обычно - 0
public $_secure = 0;
// прото я, т.е. localhost
public $_localhost = '127.0.0.1';
// Тут все очевидно. Если что, см. configuration.php
private $_from = null;
private $_fromName = null;
private $_server = null;
private $_username = null;
private $_password = null;
// Конструктор класса. Инициализация переменных.
function __construct( $from, $fromName, $server, $username, $password ) {
$this->_from = trim($from);
$this->_fromName = trim($fromName);
$this->_server = $server;
$this->_username = $username;
$this->_password = $password;
$this->_status = 1; // Означает, что объект создан, готов к работе.
}
// Метод подготавливает письмо к отправке и отправляет его.
// Возвращает true, если отправка прошла успешно
public function send( $to, $toName, $subject, $message, $headers='', $isHtml=0 ) {
$this->_errNum = 0;
$this->_errText = '';
$this->_status = 2; // Устанавливаем метку, что объект начал отправлять сообщение.
$this->_log = array(); // Обнуляем лог
// Установка соединения с SMTP сервером
$smtpConnect = fsockopen($this->_server, $this->_port, $errno, $errstr, $this->_timeout);
$smtpResponse = fgets($smtpConnect, 4096);
// Проверка, установлено ли SMTP физическое соединение? Нет?
if (empty($smtpConnect)) { // Завершаем работу метода и вписываем ошибку
$this->_errNum = $errno;
$this->_errText = "Failed to connect: $smtpResponse";
return false;
} else {
// Соединено с: $smtpResponse
$this->_log['connection'] = $smtpResponse;
}
// Говорим HELO
fputs($smtpConnect, "HELO {$this->_localhost}". $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['helo'] = $smtpResponse; // Записываем ответ на наше HELO
// Если требуется, открываем TLS соединение, то открываем его
if ($this->_secure) {
fputs($smtpConnect, "STARTTLS". $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['tls'] = "$smtpResponse";
// После старта TLS надо сказать еще раз HELO
fputs($smtpConnect, "HELO {$this->_localhost}". $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['helo2'] = "$smtpResponse";
}
// Запрос на авторизованный логин
fputs($smtpConnect,"AUTH LOGIN" . $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['authrequest'] = $smtpResponse;
// Отправка имени пользователя
fputs($smtpConnect, base64_encode($this->_username) . $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['authusername'] = $smtpResponse;
// Отправка пароля
fputs($smtpConnect, base64_encode($this->_password) . $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['authpassword'] = "$smtpResponse";
// email от кого
fputs($smtpConnect, "MAIL FROM: $this->_from" . $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['mailfrom'] = "$smtpResponse";
// email кому
fputs($smtpConnect, "RCPT TO: $to" . $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['mailto'] = "$smtpResponse";
// email сам. Готовимся к посылке данных
fputs($smtpConnect, "DATA" . $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['data1'] = "$smtpResponse";
//Составляем заголовки
$headers = "MIME-Version: 1.0" . $this->_line;
$headers .= "Content-type: text/".($isHtml ? "html" : "plain")."; charset=Windows-1251" . $this->_line;
$headers .= "To: $toName <$to>" . $this->_line;
$headers .= "From: {$this->_fromName} <{$this->_from}>" . $this->_line;
// Отправляем заголовок и само сообщение.
// Точка в самом конце означает конец сообщения.
fputs($smtpConnect, "Subject: $subject\r\n$headers\r\n\r\n$message\r\n.\r\n");
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['data2response'] = $smtpResponse;
// Завершаем передачу данных
fputs($smtpConnect,"QUIT" . $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['quit'] = $smtpResponse;
$this->_log['quitcode'] = substr($smtpResponse,0,3);
fclose($smtpConnect); // Закрываем SMTP соединение
$this->_status = 1; // Объект снова готов к работе. Освободился от работы.
return $this->_log['quitcode'];
}
// Метод пытается вернуть значение определенного параметра лога отправки сообщения
// или всего массива лога.
public function getLog( $param='' ) {
if (strlen($param)) {
if (isset($this->_log[$param])) {
return $this->_log[$param];
} else {
return false;
}
} else { // Надо вернуть весь массив?
return $this->_log;
}
}
// Метод возвращает текущий статус работы объекта.
// Может понадобиться при многопоточности, а пока что пусть будет.
public function getStatus() {
return $this->_status;
}
}
?>
Отправить email из php скрипта.
Мне нужно написать скрипт, который отправляет письмо с подтверждением емэйла. Но я не знаю как отправить письмо. Можете помочь?
Код:
mail()
тебе рыть в сторону четвёртого параметра
Код:
<?php
/**
* @package Dolotov
* @subpackage Email
* @copyright Лиецнзия (C) 2007 Алексей Долотов и всё.
* @license Все права принадлежат Алексею Долотову, reg (пёсик) dolotov.com.
* @author Alexey Dolotov <post (пёсик) dolotov.com>
* @description Модуль отправки e-mail сообщений
*/
// Настройки существующего почтового ящика, с которого будут отправляться письма.
// Желательно, чтобы ящик находился на этом же сервере для повышения скорости работы.
// Раскомментирование закомментированных переменных ничего не даст. Сейчас они жестко заданы в классе mailSend
$nmSmtpFrom = 'manager@a25.ru'; // Адрес отправителя
$nmSmtpFromName = 'Служба уведомлений'; // Имя отправителя
$nmSmtpServer = 'mail.a25.ru'; // Адрес SMTP сервера (mail.example.com) или же IP адрес непосредственно
//$nmSmtpPort = '25'; // По умолчанию 25
//$nmSmtpTimeout = '30'; // Время ожидания реакции от сервера. Если недостаточно, попробуйте 45
$nmSmtpUsername = 'manager@a25.ru'; // логин для SMTP-авторизации
$nmSmtpPassword = 'qazws'; // Пароль для smtp
//$nmSmtpLocalhost = "127.0.0.1"; // Кто я такой. Вроде бы, всегда работает с 127.0.0.1
//$nmNewLine = "\r\n"; // Определение символа новой строки
//$nmSmtpSecure = 0; // 1 если требуется именно безопасное соединение. Обычно - 0
/**
* Класс отправки сообщений через SMTP.
* @subpackage Email
* @package Dolotov
*/
class mailSend {
// Ассоциативный массив результатов выполнения последней отправки сообщения
private $_log = array();
// Текущий статус объекта
// 0 - объект не создан еще
// 1 - создан, готов к работе
// 2 - отправляет сообщение
private $_status = 0;
// Код ошибки, если таковая была. Иначе 0
private $_errNum = 0;
// Текст ошибки, если таковая была.
private $_errText = '';
// Порт, через который происходит соединение с SMTP сервером
public $_port = 25;
// Время ожидания реакции от сервера. Если недостаточно, попробуйте 45
public $_timeout = 30;
// Определение символа новой строки
public $_line = "\r\n";
// 1 если требуется именно безопасное соединение. Обычно - 0
public $_secure = 0;
// прото я, т.е. localhost
public $_localhost = '127.0.0.1';
// Тут все очевидно. Если что, см. configuration.php
private $_from = null;
private $_fromName = null;
private $_server = null;
private $_username = null;
private $_password = null;
// Конструктор класса. Инициализация переменных.
function __construct( $from, $fromName, $server, $username, $password ) {
$this->_from = trim($from);
$this->_fromName = trim($fromName);
$this->_server = $server;
$this->_username = $username;
$this->_password = $password;
$this->_status = 1; // Означает, что объект создан, готов к работе.
}
// Метод подготавливает письмо к отправке и отправляет его.
// Возвращает true, если отправка прошла успешно
public function send( $to, $toName, $subject, $message, $headers='', $isHtml=0 ) {
$this->_errNum = 0;
$this->_errText = '';
$this->_status = 2; // Устанавливаем метку, что объект начал отправлять сообщение.
$this->_log = array(); // Обнуляем лог
// Установка соединения с SMTP сервером
$smtpConnect = fsockopen($this->_server, $this->_port, $errno, $errstr, $this->_timeout);
$smtpResponse = fgets($smtpConnect, 4096);
// Проверка, установлено ли SMTP физическое соединение? Нет?
if (empty($smtpConnect)) { // Завершаем работу метода и вписываем ошибку
$this->_errNum = $errno;
$this->_errText = "Failed to connect: $smtpResponse";
return false;
} else {
// Соединено с: $smtpResponse
$this->_log['connection'] = $smtpResponse;
}
// Говорим HELO
fputs($smtpConnect, "HELO {$this->_localhost}". $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['helo'] = $smtpResponse; // Записываем ответ на наше HELO
// Если требуется, открываем TLS соединение, то открываем его
if ($this->_secure) {
fputs($smtpConnect, "STARTTLS". $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['tls'] = "$smtpResponse";
// После старта TLS надо сказать еще раз HELO
fputs($smtpConnect, "HELO {$this->_localhost}". $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['helo2'] = "$smtpResponse";
}
// Запрос на авторизованный логин
fputs($smtpConnect,"AUTH LOGIN" . $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['authrequest'] = $smtpResponse;
// Отправка имени пользователя
fputs($smtpConnect, base64_encode($this->_username) . $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['authusername'] = $smtpResponse;
// Отправка пароля
fputs($smtpConnect, base64_encode($this->_password) . $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['authpassword'] = "$smtpResponse";
// email от кого
fputs($smtpConnect, "MAIL FROM: $this->_from" . $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['mailfrom'] = "$smtpResponse";
// email кому
fputs($smtpConnect, "RCPT TO: $to" . $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['mailto'] = "$smtpResponse";
// email сам. Готовимся к посылке данных
fputs($smtpConnect, "DATA" . $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['data1'] = "$smtpResponse";
//Составляем заголовки
$headers = "MIME-Version: 1.0" . $this->_line;
$headers .= "Content-type: text/".($isHtml ? "html" : "plain")."; charset=Windows-1251" . $this->_line;
$headers .= "To: $toName <$to>" . $this->_line;
$headers .= "From: {$this->_fromName} <{$this->_from}>" . $this->_line;
// Отправляем заголовок и само сообщение.
// Точка в самом конце означает конец сообщения.
fputs($smtpConnect, "Subject: $subject\r\n$headers\r\n\r\n$message\r\n.\r\n");
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['data2response'] = $smtpResponse;
// Завершаем передачу данных
fputs($smtpConnect,"QUIT" . $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['quit'] = $smtpResponse;
$this->_log['quitcode'] = substr($smtpResponse,0,3);
fclose($smtpConnect); // Закрываем SMTP соединение
$this->_status = 1; // Объект снова готов к работе. Освободился от работы.
return $this->_log['quitcode'];
}
// Метод пытается вернуть значение определенного параметра лога отправки сообщения
// или всего массива лога.
public function getLog( $param='' ) {
if (strlen($param)) {
if (isset($this->_log[$param])) {
return $this->_log[$param];
} else {
return false;
}
} else { // Надо вернуть весь массив?
return $this->_log;
}
}
// Метод возвращает текущий статус работы объекта.
// Может понадобиться при многопоточности, а пока что пусть будет.
public function getStatus() {
return $this->_status;
}
}
?>
/**
* @package Dolotov
* @subpackage Email
* @copyright Лиецнзия (C) 2007 Алексей Долотов и всё.
* @license Все права принадлежат Алексею Долотову, reg (пёсик) dolotov.com.
* @author Alexey Dolotov <post (пёсик) dolotov.com>
* @description Модуль отправки e-mail сообщений
*/
// Настройки существующего почтового ящика, с которого будут отправляться письма.
// Желательно, чтобы ящик находился на этом же сервере для повышения скорости работы.
// Раскомментирование закомментированных переменных ничего не даст. Сейчас они жестко заданы в классе mailSend
$nmSmtpFrom = 'manager@a25.ru'; // Адрес отправителя
$nmSmtpFromName = 'Служба уведомлений'; // Имя отправителя
$nmSmtpServer = 'mail.a25.ru'; // Адрес SMTP сервера (mail.example.com) или же IP адрес непосредственно
//$nmSmtpPort = '25'; // По умолчанию 25
//$nmSmtpTimeout = '30'; // Время ожидания реакции от сервера. Если недостаточно, попробуйте 45
$nmSmtpUsername = 'manager@a25.ru'; // логин для SMTP-авторизации
$nmSmtpPassword = 'qazws'; // Пароль для smtp
//$nmSmtpLocalhost = "127.0.0.1"; // Кто я такой. Вроде бы, всегда работает с 127.0.0.1
//$nmNewLine = "\r\n"; // Определение символа новой строки
//$nmSmtpSecure = 0; // 1 если требуется именно безопасное соединение. Обычно - 0
/**
* Класс отправки сообщений через SMTP.
* @subpackage Email
* @package Dolotov
*/
class mailSend {
// Ассоциативный массив результатов выполнения последней отправки сообщения
private $_log = array();
// Текущий статус объекта
// 0 - объект не создан еще
// 1 - создан, готов к работе
// 2 - отправляет сообщение
private $_status = 0;
// Код ошибки, если таковая была. Иначе 0
private $_errNum = 0;
// Текст ошибки, если таковая была.
private $_errText = '';
// Порт, через который происходит соединение с SMTP сервером
public $_port = 25;
// Время ожидания реакции от сервера. Если недостаточно, попробуйте 45
public $_timeout = 30;
// Определение символа новой строки
public $_line = "\r\n";
// 1 если требуется именно безопасное соединение. Обычно - 0
public $_secure = 0;
// прото я, т.е. localhost
public $_localhost = '127.0.0.1';
// Тут все очевидно. Если что, см. configuration.php
private $_from = null;
private $_fromName = null;
private $_server = null;
private $_username = null;
private $_password = null;
// Конструктор класса. Инициализация переменных.
function __construct( $from, $fromName, $server, $username, $password ) {
$this->_from = trim($from);
$this->_fromName = trim($fromName);
$this->_server = $server;
$this->_username = $username;
$this->_password = $password;
$this->_status = 1; // Означает, что объект создан, готов к работе.
}
// Метод подготавливает письмо к отправке и отправляет его.
// Возвращает true, если отправка прошла успешно
public function send( $to, $toName, $subject, $message, $headers='', $isHtml=0 ) {
$this->_errNum = 0;
$this->_errText = '';
$this->_status = 2; // Устанавливаем метку, что объект начал отправлять сообщение.
$this->_log = array(); // Обнуляем лог
// Установка соединения с SMTP сервером
$smtpConnect = fsockopen($this->_server, $this->_port, $errno, $errstr, $this->_timeout);
$smtpResponse = fgets($smtpConnect, 4096);
// Проверка, установлено ли SMTP физическое соединение? Нет?
if (empty($smtpConnect)) { // Завершаем работу метода и вписываем ошибку
$this->_errNum = $errno;
$this->_errText = "Failed to connect: $smtpResponse";
return false;
} else {
// Соединено с: $smtpResponse
$this->_log['connection'] = $smtpResponse;
}
// Говорим HELO
fputs($smtpConnect, "HELO {$this->_localhost}". $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['helo'] = $smtpResponse; // Записываем ответ на наше HELO
// Если требуется, открываем TLS соединение, то открываем его
if ($this->_secure) {
fputs($smtpConnect, "STARTTLS". $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['tls'] = "$smtpResponse";
// После старта TLS надо сказать еще раз HELO
fputs($smtpConnect, "HELO {$this->_localhost}". $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['helo2'] = "$smtpResponse";
}
// Запрос на авторизованный логин
fputs($smtpConnect,"AUTH LOGIN" . $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['authrequest'] = $smtpResponse;
// Отправка имени пользователя
fputs($smtpConnect, base64_encode($this->_username) . $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['authusername'] = $smtpResponse;
// Отправка пароля
fputs($smtpConnect, base64_encode($this->_password) . $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['authpassword'] = "$smtpResponse";
// email от кого
fputs($smtpConnect, "MAIL FROM: $this->_from" . $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['mailfrom'] = "$smtpResponse";
// email кому
fputs($smtpConnect, "RCPT TO: $to" . $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['mailto'] = "$smtpResponse";
// email сам. Готовимся к посылке данных
fputs($smtpConnect, "DATA" . $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['data1'] = "$smtpResponse";
//Составляем заголовки
$headers = "MIME-Version: 1.0" . $this->_line;
$headers .= "Content-type: text/".($isHtml ? "html" : "plain")."; charset=Windows-1251" . $this->_line;
$headers .= "To: $toName <$to>" . $this->_line;
$headers .= "From: {$this->_fromName} <{$this->_from}>" . $this->_line;
// Отправляем заголовок и само сообщение.
// Точка в самом конце означает конец сообщения.
fputs($smtpConnect, "Subject: $subject\r\n$headers\r\n\r\n$message\r\n.\r\n");
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['data2response'] = $smtpResponse;
// Завершаем передачу данных
fputs($smtpConnect,"QUIT" . $this->_line);
$smtpResponse = fgets($smtpConnect, 4096);
$this->_log['quit'] = $smtpResponse;
$this->_log['quitcode'] = substr($smtpResponse,0,3);
fclose($smtpConnect); // Закрываем SMTP соединение
$this->_status = 1; // Объект снова готов к работе. Освободился от работы.
return $this->_log['quitcode'];
}
// Метод пытается вернуть значение определенного параметра лога отправки сообщения
// или всего массива лога.
public function getLog( $param='' ) {
if (strlen($param)) {
if (isset($this->_log[$param])) {
return $this->_log[$param];
} else {
return false;
}
} else { // Надо вернуть весь массив?
return $this->_log;
}
}
// Метод возвращает текущий статус работы объекта.
// Может понадобиться при многопоточности, а пока что пусть будет.
public function getStatus() {
return $this->_status;
}
}
?>
мне кажется что ему вовсе не емейл отправлять, а подтверждать регистрацию нужно.
Код:
$mess = "";
$myemail = "my@email.com";
$headers = "";
$subj = "тут тема";
$mess .= "тут сообщение";
$mess = wordwrap($mess, 70);
$headers = "From: ".$myemail."\r\n";
$headers .= "Reply-To: ".$myemail."\r\n";
$headers .= "Return-path: ".$myemail."\r\n";
$headers .= "Content-Type: text/plain; charset=windows-1251\r\n";
mail($myemail, $subj, $mess, $headers);
$myemail = "my@email.com";
$headers = "";
$subj = "тут тема";
$mess .= "тут сообщение";
$mess = wordwrap($mess, 70);
$headers = "From: ".$myemail."\r\n";
$headers .= "Reply-To: ".$myemail."\r\n";
$headers .= "Return-path: ".$myemail."\r\n";
$headers .= "Content-Type: text/plain; charset=windows-1251\r\n";
mail($myemail, $subj, $mess, $headers);
"Но я не знаю как отправить письмо" - это его слова
http://www.php-mail.ru
Coteyko, спасибо. Почти это-же я и использовал, но были проблеммы со шрифтами - теперь нет!
Я только не понял что этот скрипт делает?
Это что ли типа почтового клиента?
[QUOTE=Dolonet]
Лови продукт в том числе моего разума. Полноценный объект отправки почты с дебагом. Отправляет очень полноценно.
PHP код:
[/QUOTE]
__________________
Завсегда с вами, Алексей.
Полезные ссылки: PHP, MySQL, Школа w3c;
Да, мне нужно было подтвердить регестрацию. Но я шашел то, что меня устраивает на сайте
Coteyko, спасибо. Почти это-же я и использовал, но были проблеммы со шрифтами - теперь нет!
Я только не понял что этот скрипт делает?
Это что ли типа почтового клиента?
[QUOTE=Dolonet]
Лови продукт в том числе моего разума. Полноценный объект отправки почты с дебагом. Отправляет очень полноценно.
PHP код:
Код:
__________________
Завсегда с вами, Алексей.
Полезные ссылки: PHP, MySQL, Школа w3c;