Вы не зашли.
Страницы 1
Почти все развитые CMS умеют отправлять сообщения через авторизованные SMTP соединения. NG умеет только через функцию mail в PHP - это не удобно. Приходится вместо модуля CMS для регистрации использовать модуль форума. У меня FluxBB - он это дело умеет.
Хотелось бы иметь такую возможность в NG. Я думаю код можно у FluxBB позаимствовать.
Не в сети
Пример в котором реализована отправка писем с использованием smtp-сервера, для которого требуется авторизация. Поэтому не забудь добавить в скрипт соответствующие реквизиты доступа, например:
<?php
$mhSmtpMail_Server = "smtp.domain.tld"; // Укажите адрес SMTP-сервера
$mhSmtpMail_Port = "25"; // Порт SMTP-сервера, как правило 25
$mhSmtpMail_Username = "postmaster@domain.tld"; // Имя почтового ящика (пользователя)
$mhSmtpMail_Password = "password"; // и пароль к нему.
$mhSmtpMail_From = "Имя отправителя"; // Имя отправителя в поле From
// Обратите внимание, что в условиях нашей почтовой системы, имя пользователя требуется указывать полностью, например postmaster@domain.tld
function MailSmtp($to, $subject, $message, $headers)
{
global $mhSmtpMail_Server, $mhSmtpMail_Port, $mhSmtpMail_Username, $mhSmtpMail_Password;
$mhSmtpMail_localhost = "localhost";
$mhSmtpMail_newline = "\r\n";
$mhSmtpMail_timeout = "30";
$smtpConnect = fsockopen($mhSmtpMail_Server, $mhSmtpMail_Port, $errno, $errstr, $mhSmtpMail_timeout);
$smtpResponse = fgets($smtpConnect, 515);
if(empty($smtpConnect))
{
$output = "Failed to connect: $smtpResponse";
return $output;
}
else
{
$logArray['connection'] = "Connected: $smtpResponse";
}
fputs($smtpConnect,"AUTH LOGIN" . $mhSmtpMail_newline);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['authrequest'] = "$smtpResponse";
fputs($smtpConnect, base64_encode($mhSmtpMail_Username) . $mhSmtpMail_newline);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['authmhSmtpMail_username'] = "$smtpResponse";
fputs($smtpConnect, base64_encode($mhSmtpMail_Password) . $mhSmtpMail_newline);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['authmhSmtpMail_password'] = "$smtpResponse";
fputs($smtpConnect, "HELO $mhSmtpMail_localhost" . $mhSmtpMail_newline);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['heloresponse'] = "$smtpResponse";
fputs($smtpConnect, "MAIL FROM: $mhSmtpMail_Username" . $mhSmtpMail_newline);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['mailmhSmtpMail_fromresponse'] = "$smtpResponse";
fputs($smtpConnect, "RCPT TO: $to" . $mhSmtpMail_newline);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['mailtoresponse'] = "$smtpResponse";
fputs($smtpConnect, "DATA" . $mhSmtpMail_newline);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['data1response'] = "$smtpResponse";
fputs($smtpConnect, "Subject: $subject\r\n$headers\r\n\r\n$message\r\n.\r\n");
$smtpResponse = fgets($smtpConnect, 515);
$logArray['data2response'] = "$smtpResponse";
fputs($smtpConnect,"QUIT" . $mhSmtpMail_newline);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['quitresponse'] = "$smtpResponse";
}
?>
Этот код можно добавить в function sendEmailMessage после " $message .= chunk_split(base64_encode(fread($file, filesize($filename))))."\n";} "
Также неплохо заменить хедеры, например на эти:
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=windows-1251\r\n";
$headers .= "To: $to\r\n";
$headers .= "From: Tournir Registration <admin@excessive.ru>";
Вот эту часть
$mhSmtpMail_Server = "smtp.excessive.ru"; // Укажите адрес SMTP-сервера
$mhSmtpMail_Port = "25"; // Порт SMTP-сервера, как правило 25
$mhSmtpMail_Username = "admin@excessive.ru"; // Имя почтового ящика (пользователя)
$mhSmtpMail_Password = "cLAN1124"; // и пароль к нему.
$mhSmtpMail_From = "Администрация excessive.ru"; // Имя отправителя в поле From
вставляй до функции.
Удачи!:D
Не в сети
Быстрое наколеночное решение. По хорошему это надо причесывать и добавлять в движок.
/engine/includes/inc/functions.inc.php
function sendEmailMessage($to, $subject, $message, $filename = false, $mail_from = false, $ctype = 'text/html', $smtp = true) {
global $lang, $config;
// Include new PHP mailer class
@include_once root.'includes/classes/phpmailer/class.phpmailer.php';
$mail = new phpmailer;
if($smtp){
$__smtp = array(
"host" => "mail.ayola.net", //smtp сервер
"debug" => 0, //отображение информации дебаггера (0 - нет вообще)
"auth" => true, //сервер требует авторизации
"port" => 25, //порт (по-умолчанию - 25)
"username" => "info@example.ru", //имя пользователя на сервере
"password" => "*****", //пароль
"addreply" => "info@example.ru", //ваш е-mail
"replyto" => "info@example.ru" //e-mail ответа
);
$mail->IsSMTP(); # Sets Mailer to send message using SMTP.
$mail->IsHTML(true);
try {
$mail->CharSet = 'Windows-1251';
$mail->FromName = '[ INFO ]';
$mail->Host = $__smtp['host'];
$mail->SMTPDebug = $__smtp['debug'];
$mail->SMTPAuth = $__smtp['auth'];
$mail->Port = $__smtp['port'];
$mail->Username = $__smtp['username'];
$mail->Password = $__smtp['password'];
$mail->AddReplyTo($__smtp['addreply'], $__smtp['username']);
$mail->AddAddress($to); //кому письмо
$mail->SetFrom($__smtp['addreply'], $__smtp['username']); //от кого (желательно указывать свой реальный e-mail на используемом SMTP сервере
$mail->AddReplyTo($__smtp['addreply'], $__smtp['username']);
$mail->Subject = htmlspecialchars($subject);
$mail->MsgHTML($message);
if (($filename !== false) && (is_file($filename))) {
$mail->AddAttachment($filename);
}
$mail->Send();
# echo "Message sent Ok!</p>\n";
} catch (phpmailerException $e) {
echo $e->errorMessage();
} catch (Exception $e) {
echo $e->getMessage();
}
return 0;
}
$mail->CharSet = 'Windows-1251';
$mail->FromName = 'NGCMS sender';
$mail->From = (!$mail_from) ? "mailbot@".str_replace("www.", "", $_SERVER['SERVER_NAME']) : $mail_from;
$mail->Subject = $subject;
$mail->Body = $message;
$mail->AddAddress($to, $to);
if (($filename !== false) && (is_file($filename))) {
$mail->AddAttachment($filename);
}
return $mail->Send();
$mail_from = (!$mail_from) ? "mailbot@".str_replace("www.", "", $_SERVER['SERVER_NAME']) : $mail_from;
$uniqid = md5(uniqid(time()));
$headers = 'From: '.$mail_from."\n";
$headers .= 'Reply-to: '.$mail_from."\n";
$headers .= 'Return-Path: '.$mail_from."\n";
$headers .= 'Message-ID: <'.$uniqid.'@'.$_SERVER['SERVER_NAME'].">\n";
$headers .= 'MIME-Version: 1.0'."\n";
$headers .= 'Date: '.gmdate('D, d M Y H:i:s', time())."\n";
$headers .= 'X-Priority: 3'."\n";
$headers .= 'X-MSMail-Priority: Normal'."\n";
$headers .= 'X-Mailer: '.engineName.' : '.engineVersion."\n";
$headers .= 'X-MimeOLE: '.engineName.' : '.engineVersion."\n";
$headers .= 'content-type: multipart/mixed;boundary="----------'.$uniqid.'"'."\n\n";
$headers .= '------------'.$uniqid."\n";
$headers .= 'content-type: '.$ctype.';charset='.$lang['encoding'].''."\n";
$headers .= 'content-transfer-Encoding: 8bit';
if (is_file($filename)){
$file = fopen($filename, 'rb');
$message .= "\n".'------------'.$uniqid."\n";
$message .= 'Content-Type: application/octet-stream;name="'.basename($filename).'"'."\n";
$message .= 'Content-Transfer-Encoding: base64'."\n";
$message .= 'Content-Disposition: attachment;';
$message .= 'filename="'.basename($filename).'"'."\n\n";
$message .= chunk_split(base64_encode(fread($file, filesize($filename))))."\n";
}
@mail($to, $subject, $message, $headers);
}
Не в сети
А как бы доделать эту функцию для возможности отправки почты с SSL?
Быстрое наколеночное решение. По хорошему это надо причесывать и добавлять в движок.
/engine/includes/inc/functions.inc.php
function sendEmailMessage($to, $subject, $message, $filename = false, $mail_from = false, $ctype = 'text/html', $smtp = true) { global $lang, $config; // Include new PHP mailer class @include_once root.'includes/classes/phpmailer/class.phpmailer.php'; $mail = new phpmailer; if($smtp){ $__smtp = array( "host" => "mail.ayola.net", //smtp сервер "debug" => 0, //отображение информации дебаггера (0 - нет вообще) "auth" => true, //сервер требует авторизации "port" => 25, //порт (по-умолчанию - 25) "username" => "info@example.ru", //имя пользователя на сервере "password" => "*****", //пароль "addreply" => "info@example.ru", //ваш е-mail "replyto" => "info@example.ru" //e-mail ответа ); $mail->IsSMTP(); # Sets Mailer to send message using SMTP. $mail->IsHTML(true); try { $mail->CharSet = 'Windows-1251'; $mail->FromName = '[ INFO ]'; $mail->Host = $__smtp['host']; $mail->SMTPDebug = $__smtp['debug']; $mail->SMTPAuth = $__smtp['auth']; $mail->Port = $__smtp['port']; $mail->Username = $__smtp['username']; $mail->Password = $__smtp['password']; $mail->AddReplyTo($__smtp['addreply'], $__smtp['username']); $mail->AddAddress($to); //кому письмо $mail->SetFrom($__smtp['addreply'], $__smtp['username']); //от кого (желательно указывать свой реальный e-mail на используемом SMTP сервере $mail->AddReplyTo($__smtp['addreply'], $__smtp['username']); $mail->Subject = htmlspecialchars($subject); $mail->MsgHTML($message); if (($filename !== false) && (is_file($filename))) { $mail->AddAttachment($filename); } $mail->Send(); # echo "Message sent Ok!</p>\n"; } catch (phpmailerException $e) { echo $e->errorMessage(); } catch (Exception $e) { echo $e->getMessage(); } return 0; } $mail->CharSet = 'Windows-1251'; $mail->FromName = 'NGCMS sender'; $mail->From = (!$mail_from) ? "mailbot@".str_replace("www.", "", $_SERVER['SERVER_NAME']) : $mail_from; $mail->Subject = $subject; $mail->Body = $message; $mail->AddAddress($to, $to); if (($filename !== false) && (is_file($filename))) { $mail->AddAttachment($filename); } return $mail->Send(); $mail_from = (!$mail_from) ? "mailbot@".str_replace("www.", "", $_SERVER['SERVER_NAME']) : $mail_from; $uniqid = md5(uniqid(time())); $headers = 'From: '.$mail_from."\n"; $headers .= 'Reply-to: '.$mail_from."\n"; $headers .= 'Return-Path: '.$mail_from."\n"; $headers .= 'Message-ID: <'.$uniqid.'@'.$_SERVER['SERVER_NAME'].">\n"; $headers .= 'MIME-Version: 1.0'."\n"; $headers .= 'Date: '.gmdate('D, d M Y H:i:s', time())."\n"; $headers .= 'X-Priority: 3'."\n"; $headers .= 'X-MSMail-Priority: Normal'."\n"; $headers .= 'X-Mailer: '.engineName.' : '.engineVersion."\n"; $headers .= 'X-MimeOLE: '.engineName.' : '.engineVersion."\n"; $headers .= 'content-type: multipart/mixed;boundary="----------'.$uniqid.'"'."\n\n"; $headers .= '------------'.$uniqid."\n"; $headers .= 'content-type: '.$ctype.';charset='.$lang['encoding'].''."\n"; $headers .= 'content-transfer-Encoding: 8bit'; if (is_file($filename)){ $file = fopen($filename, 'rb'); $message .= "\n".'------------'.$uniqid."\n"; $message .= 'Content-Type: application/octet-stream;name="'.basename($filename).'"'."\n"; $message .= 'Content-Transfer-Encoding: base64'."\n"; $message .= 'Content-Disposition: attachment;'; $message .= 'filename="'.basename($filename).'"'."\n\n"; $message .= chunk_split(base64_encode(fread($file, filesize($filename))))."\n"; } @mail($to, $subject, $message, $headers); }
Не в сети
RaSSveT, для отправки почты используется библиотека phpmailer (лежит в engine/includes/classes/phpmainer/).
Она, вроде, поддерживает работу с SSL.
При желании можешь пропатчить функцию отправки email сообщения sendEmailMessage(), которая находится в engine/includes/inc/functions.inc.php и реализовать необходимый функционал.
Не в сети
При желании можешь пропатчить функцию отправки email сообщения sendEmailMessage(), которая находится в engine/includes/inc/functions.inc.php и реализовать необходимый функционал.
Не в сети
Страницы 1