[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Почтовый класс от Ирбиса у меня не работает
AlmazDelDiablo
Подскажите, что я не так делаю? Письмо не приходит.
function parceActivateMsg( $message, $url ) {
global $cfg;
$result = str_replace( '{url}', $url, $message );
$result = str_replace( '{site}', $cfg['title'], $result );
return $result;
}

function generate_hash() {
$string = qwertyuiopasdfghjklzxcvbnm1234567890;
$string = str_shuffle( $string );
$string = str_shuffle( $string );
$time = date( 'Gnd' );
$hash = $string . $time;

return $hash;
}
$cfg = array( 

'nr_email' => "noreply@modelcraft.ru",

'activate_msg' => "Здравствуйте! С вашего почтового адреса была произведена регистрация на сайте {site}. Если это не Вы — проигнорирйте и удалите это письмо. Для актвиации
аккаунта пройдите по ссылке {url}. С уважением, администрация {site}"


);
	$actHash = generate_hash();
$actURL = '<a href="'.$cfg['domain'] .'account/activate/'.$login.'/'.$actHash.'">'.$cfg['domain'] .'account/activate/'.$login.'/'.$actHash.'</a>';

// Саздаем активационное письмо
$subject = 'ModelCraft — Активация учетной записи'; // Заголовок
$message = parceActivateMsg( $cfg['activate_msg'], $actURL ); // Текст

// Подключаем класс почты

include '../classes/mail.php';

// Создаем объект
$mail = new IRB_Mailer( $message );

// Задаем параметры
$mail->createTo( $email );
$mail->createSubject( $subject );
$mail->createFrom( $cfg['nr_email'] );
$mail->setHtml();

// Отправляем
$mail->sendMail();




Спустя 1 час, 2 минуты, 50 секунд (25.04.2011 - 17:56) liw написал(а):
Я с этим классом конечно не работал, но даже не смотря в код, -
вопросы:
А оно уходит? Есть ли ошибки?
Что значит не приходит? Может оно в спаме лежит.
Пробовал ли слать на разные почтовики?

Не приходит похоже на фразу "у меня ничего не работает" - от которой пользы ноль.

Поконкретнее пожалуйста.

Спустя 13 минут, 6 секунд (25.04.2011 - 18:09) inpost написал(а):
1) Когда проверяется работа обычного mail(), указываешь на прямую, без переменных:
$mail->createTo('lalala@mail.ru');

2) Когда проверяешь, используешь ТОЛЬКО английские буквы и символы
3) Когда проверяешь, отправляешь письмо на gmail.com , и пытаешься его поймать в папке "Входящие" или в папке "Спам"

Спустя 2 часа, 7 минут, 48 секунд (25.04.2011 - 20:17) Michael написал(а):
у обновленном классе у твина можно указывать и имя от кого. Почитай из архива описание.

Спустя 17 часов, 53 минуты, 52 секунды (26.04.2011 - 14:10) AlmazDelDiablo написал(а):
Сделал вот так, но письмо все равно не приходит. После отправки никаких ошибок на странице не появилось.
<?php

error_reporting ( E_ALL ^ E_WARNING ^ E_NOTICE );
header( "Content-Type: text/html; charset=windows-1251" );

include './engine/classes/mail.php';
$mail = new IRB_Mailer( 'test message' );

$mail->createTo( 'almazdeldiablo@gmail.com' );
$mail->createSubject( 'test' );
$mail->createFrom( 'noreply@modelcraft.ru' );
$mail->setHtml();
$mail->sendMail();

?>

Спустя 8 минут, 13 секунд (26.04.2011 - 14:19) twin написал(а):
Ну там же диагностика есть. Вот так попробуй посмотреть:
.
.
.

echo $mail->sendMail();

Спустя 44 минуты, 14 секунд (26.04.2011 - 15:03) AlmazDelDiablo написал(а):
Все равно ничего не выдает.

У меня точно то скачано?
Свернутый текст
<?php  

/**
* IRB_Mailer - PHP email transport class
* NOTE: Requires PHP version 5 or later
* Info:
http://irbis-team.ru
* @author IT studio IRBIS-team
*
@copyright © 2009 IRBIS-team
*
@version 0.1
*
@license http://www.opensource.org/licenses/rpl1.5.txt
*/

class IRB_Mailer
{

/////////////////////////////////////////////////
// PUBLIC
/////////////////////////////////////////////////

/**
* Establishes the address of the addressee
* Устанавливает адрес получателя
*
@var string
*/

public $to;

/**
* Sets the From email address for the message.
* Устанавливает адрес получателя.
*
@var string
*/

public $from;

/**
* Sets the Subject of the message.
* Устанавливает адрес получателя
*
@var string
*/

public $subject;

/**
* Sets the Body of the message.
* Устанавливает тело сообщения
*
@var string
*/

public $message;

/**
* Errors of performance of the program.
*
@var array
*/

public $mailererrors = array(

'no_text' => 'There is no message text',
'no_file' => 'The path to a file is not specified',
'no_path' => 'There is no file on the specified path',
'no_addresse' => 'There is no addresse',
'not_correct' => 'The e-mail address is not correct',
'no_sender' => 'There is no sender',
'no_theme' => 'There is no theme',
'no_send' => 'For technical reasons letter sending
is impossible at present'
,

);

/////////////////////////////////////////////////
// PROPERTIES AND PRIVATE
/////////////////////////////////////////////////
private $n = "\n";
private $boundary1;
private $boundary2;
private $html = false;
private $attach = false;
private $multipart;
private $headers;
private $attachment;
private $errors = array();
private $dummy = 'Your post client does not support specification MIME 1.0
For correct display of the letter you should replace the post program.'
;

/////////////////////////////////////////////////
// METHODS, VARIABLES
/////////////////////////////////////////////////

/**
* Constructor.
*
@param string $message
*
@Establishes a symbol of carrying over of a line and dividers,
* Language of error messages,
* and prepares the message in a text kind.
* Конструктор. Устанавливает символ переноса строки и разделители,
* язык сообщений об ошибках,
* а так же готовит сообщение в текстовом виде
*/

public function __construct($message = false, $language = false)
{

if(substr(PHP_OS, 0, 3) == "WIN")
$this->n = "\r\n";

$this->boundary1 = '==' . md5(uniqid(time()));
$this->boundary2 = '==' . md5(uniqid(time()));

if(is_array($language))
$this->mailererrors = $language;

if($message)
{
$this->message = $message;
$this->headers = $this->dummy . $this->n . $this->n . $this->headers .
'--' . $this->boundary2 . $this->n;
$this->headers .= 'Content-type: text/plain; charset="utf-8"' . $this->n;
$this->headers .= 'Content-Transfer-Encoding: base64' . $this->n . $this->n;
$this->multipart = $this->headers . chunk_split(base64_encode($this->message)) . $this->n;
}
else
{
$this->errors[] = $this->mailererrors['no_text'];
}
}


/**
* Method of an attachment of a file.
* Метод прикрепления файла
*
@access public
*
@param string $file and $filename
*
@return void
*/

public function attacheFile($file = false, $filename = false)
{

if($file)
{
$this->attach = true;

if(file_exists($file))
{

if(!$filename)
$filename = basename($file);
else
$filename = '=?utf-8?b?'. base64_encode($filename) .'?='. strrchr(basename($file), ".");

$this->attachment = 'Content-type: application/octet-stream; name="'. $filename .'"'. $this->n;
$this->attachment .= 'Content-disposition: attachment; filename="'. $filename .'"'. $this->n;
$this->attachment .= 'Content-Transfer-Encoding: base64'. $this->n . $this->n;
$this->attachment .= chunk_split(base64_encode(file_get_contents($file))) . $this->n . $this->n;
}
else
{
$this->errors[] = $this->mailererrors['no_path'];
}
}

else
{
$this->errors[] = $this->mailererrors['no_file'];
}
}


/**
* Sets message type to HTML.
* Устанавливает HTML формат сообщения
*
@access public
*
@return void
*/

public function setHtml()
{

$this->html = true;
$this->multipart = '';

if($this->attach)
{
$this->multipart = '--'. $this->boundary1 . $this->n;
$this->multipart .= 'Content-type: multipart/alternative; boundary="'.
$this->boundary2 .'"'. $this->n.$this->n;
}

$this->multipart .= $this->headers;
$this->multipart .= chunk_split(base64_encode(strip_tags($this->message))) . $this->n;
$this->multipart .= '--'. $this->boundary2 . $this->n;
$this->multipart .= 'Content-type: text/html; charset="utf-8"'. $this->n;
$this->multipart .= 'Content-Transfer-Encoding: base64'. $this->n. $this->n;
$this->multipart .= chunk_split(base64_encode($this->message)) . $this->n;
$this->multipart .= '--'. $this->boundary2 .'--';
}

/**
* Adds a "To" address..
* Устанавливает адрес "Кому"
*
@access public
*
@param string $to
*
@return void
*/

public function createTo($to = false)
{
if(!$to)
$this->errors[] = $this->mailererrors['no_addresse'];
elseif(!preg_match("/^[a-z0-9_\.-]+@([a-z0-9]+\.)+[a-z]{2,6}$/i", $to))
$this->errors[] = $this->mailererrors['not_correct'];
else
$this->to = trim($to);
}

/**
* Adds a "From" address.
* Устанавливает адрес "От кого"
*
@access public
*
@param string $from
*
@return void
*/

public function createFrom($from = false)
{
if($from)
$this->from = trim(preg_replace('/[\r\n]+/', ' ', $from));
else
$this->errors[] = $this->mailererrors['no_sender'];
}

/**
* Adds a Subject.
* Устанавливает тему сообщения
*
@access public
*
@param string $subject
*
@return void
*/

public function createSubject($subject = false)
{
if($subject)
$this->subject = '=?utf-8?b?'. base64_encode($subject) .'?=';
else
$this->errors[] = $this->mailererrors['no_theme'];
}

/**
* Forms the letter.
* Формирует письмо
*
@access private
*
@return string
*/

private function createMail()
{
$host = str_replace('www.', '', $_SERVER['HTTP_HOST']);
$header = 'Date: '. date('D, d M Y h:i:s O') . $this->n;
$header .= 'From: '. $this->from .' <'. $this->from .'>'. $this->n;
$header .= 'Message-ID: <'. md5(uniqid(time())) .'@'. $host .'>'. $this->n;
$header .= 'X-Priority: 3: '. $this->n;
$header .= 'X-Mailer: IRB_Mailer 1.0 (irbis-team.ru)'. $this->n;
$header .= 'MIME-Version: 1.0' . $this->n;


if($this->html && !$this->attach)
{
$header .= 'Content-type: multipart/alternative; boundary="'. $this->boundary2 .'"';
}
elseif($this->html && $this->attach)
{
$header .= 'Content-type: multipart/mixed; boundary="'. $this->boundary1 .'"';
$this->multipart .= $this->n .'--'. $this->boundary1 . $this->n;
$this->multipart .= $this->attachment;
$this->multipart .= '--'. $this->boundary1 .'--'. $this->n;
}
elseif($this->attach)
{
$header .= 'Content-type: multipart/mixed; boundary="'. $this->boundary2 .'"';
$this->multipart .= '--'. $this->boundary2 . $this->n;
$this->multipart .= $this->attachment;
$this->multipart .= '--'. $this->boundary1 .'--'. $this->n;
}
else
{
$header .= 'Content-type: multipart/related; boundary="'. $this->boundary2 .'"';
$this->multipart .= '--'. $this->boundary2 .'--'. $this->n;
}
return $header;
}

/**
* Deduces a script error.
* Диагностика ошибок
*
@access private
*
@return string or boolean
*/

private function checkData()
{
if(count($this->errors))
return "IRB_Mailer error: \n". implode("\n", $this->errors);
else
return
false;
}

/**
* Sends mail using the PHP mail() function.
* Отправляет письмо используя PHP функцию mail()
*
@access public
*
@return string
*/

public function sendMail()
{
if(!$error = $this->checkData())
{

$header = $this->createMail();

if(!mail($this->to, $this->subject, $this->multipart, $header, '-f'. $this->from))
return "IRB_Mailer error: \n". $this->mailererrors['no_send'];
else
return
NULL;
}
else
{
return $error;
}
}
}


?>

Спустя 36 минут, 3 секунды (26.04.2011 - 15:39) twin написал(а):
Тут последний. В образце вместе с формой.

Спустя 6 минут, 45 секунд (26.04.2011 - 15:46) Семён написал(а):
Спам проверь

Спустя 23 минуты, 19 секунд (26.04.2011 - 16:09) AlmazDelDiablo написал(а):
Использую все точно с Ирбиса (последнюю версию класса скачал):
<?php

error_reporting ( E_ALL ^ E_WARNING ^ E_NOTICE );
header( "Content-Type: text/html; charset=windows-1251" );

/////////////////////////////////////////////////////////////////////////////////////////
// ВЫЗОВ КЛАССА
/////////////////////////////////////////////////////////////////////////////////////////

$form['to'] = !empty($_POST['to'])?$_POST['to']:NULL;
$form['fromname'] = !empty($_POST['fromname'])?$_POST['fromname']:NULL;
$form['fromemail'] = !empty($_POST['fromemail'])?$_POST['fromemail']:NULL;
$form['subject'] = !empty($_POST['subject'])?$_POST['subject']:NULL;
$message = $form['message'] = !empty($_POST['message'])?$_POST['message']:NULL;

if(!empty($_POST['ok']))
{

/**
* Подключаем класс
*/

include './engine/classes/mail.php';

/**
* Сообщения об ошибках на русском языке
*/

$language = array(

'no_text' => 'Нет текста письма',
'no_file' => 'Не указан путь до файла',
'no_path' => 'Нет файла по указанному пути',
'no_open' => 'Не удалось открыть файл',
'no_addresse' => 'Нет адреса получателя',
'not_correct' => 'E-mail указан некорректно',
'no_sender' => 'Нет отправителя',
'no_theme' => 'Нет темы письма',
'no_send' => 'По техническим причинам отправка письма
в данный момент невозможна'
,

);

/**
* Добавим картинку в тело письма
*/

if(!empty($_POST['html']) && !empty($_POST['img']))
$message = '<img src="cid:img" /><br>'. $form['message'];

/**
* Создаем новый объект. Сообщение - обязательный параметр
* Язык по дефолту - английский. Можно не указывать.
*/

$mail = new IRB_Mailer($message, $language);

/**
* Чтобы вставить картинку в тело письма, вызываем этот метод
* Аргумент - cid, переданный в src тега
<img> в сообщении
*/

if(!empty($_POST['html']) && !empty($_POST['img']))
$mail -> attacheImg('img');

/**
* Если нужно - прикрепляем файл. Если нет - не пишем этот вызов
* Второй параметр указывать не обязательно. Тогда сохранится родное имя файла.
* Также можно указать расширение.
* Можно прикрепить несколько файлов, несколько раз вызвав метод.
*/

if($_FILES['file']['error'] === 0)
{
$ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
$mail -> attacheFile($_FILES['file']['tmp_name'], $_FILES['file']['name']);
}
else
{
$mail -> attacheFile('pic1.gif', 'kartinko.gif');
}

/**
* Выставляем тип.
*/

if(!empty($_POST['html']))
$mail -> setHtml();

/**
* Кому, от кого, тема.
*/

$mail -> createTo($form['to']);
$mail -> createFrom($form['fromname'], $form['fromemail']);
$mail -> createSubject($form['subject']);

/**
* Отправка. При удачной вернет NULL, при фиаско - текст ошибки
*/

$info = $mail -> sendMail();

if(empty($info))
{
header('location: ./te.php?yes');
exit;
}

}


if(isset($_GET['yes']))
$info = 'Ваше письмо отправлено';

$form = array_map('htmlspecialchars', $form);
?>

<html>
<
body>
<
b style="color:red"><?php echo !empty($info)?nl2br($info):' '; ?></b><br />
<
div style="text-align:center;">
<
form action="?" method="post" enctype="multipart/form-data">
Кому<br />
<
input name="to" size="60" type="text" value="<?php echo $form['to']; ?>" /><br />
От кого (имя)<br />
<
input name="fromname" size="60" type="text" value="<?php echo $form['fromname']; ?>" /><br />
От кого (E-mail)<br />
<
input name="fromemail" size="60" type="text" value="<?php echo $form['fromemail']; ?>" /><br />
Тема<br />
<
input name="subject" size="60" type="text" value="<?php echo $form['subject']; ?>" /><br /><br />
Сообщение   (HTML)
<
input name="html" type="checkbox" value="1" /><br />
<
textarea name="message" cols="60" rows="10"><?php echo $form['message']; ?></textarea><br />
Файл<br />
<
input name="file" type="file" /><br />
Поместить картинку в тело письма
<input name="img" type="checkbox" value="1" /><br />
<
br />
<
input name="ok" type="submit" />
</
form>

</
div>
</
body>
</
html>

Пишет: «Письмо отправлено», но на ящике его нет (в спаме тоже).

Спустя 27 минут, 50 секунд (26.04.2011 - 16:37) twin написал(а):
А на другой адрес?

Спустя 9 минут, 18 секунд (26.04.2011 - 16:46) AlmazDelDiablo написал(а):
Пробовал на: admin@noptor.ru; almazdeldiablo@gmail.com; i@almazdeldiablo.ru; noptor@yandex.ru
И с ящиков: admin@noptor.ru; noptor@yandex.ru; almazdeldiablo@gmail.com

Не работает. Может ли быть что-то связанное с сервером? У меня данвер.

Спустя 4 минуты, 15 секунд (26.04.2011 - 16:50) liw написал(а):

Если класс шлёт письма функцией mail то ничего никуда не уйдёт.
В денвере заглушка sendmail.
Почта складывается в папку денвера (сейчас не помню в какую)

Спустя 2 минуты, 39 секунд (26.04.2011 - 16:53) twin написал(а):
Z:\tmp\!sendmail

Спустя 1 минута, 52 секунды (26.04.2011 - 16:55) AlmazDelDiablo написал(а):
Мде ) Все работает, посмотрел. Спасибо ребят!

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

Спустя 2 месяца, 18 дней, 22 часа, 32 минуты, 59 секунд (15.07.2011 - 15:28) foxiSfox написал(а):
А вот у меня, странно, но не работает.

На денвере работает, на сайте типа my.mysite.com(все работает).
А вот на сайте типа site.ru не хочет отправлять на email.

my.mysite.com и site.ru один и тот же. Тупо брал копировал с my.mysite.com на site.ru и все равно, там работает, а здесь нет.

Из за хостинга может не работать? Или же искать ошибку у себя?

В сайте при переносе никаких путей менять не надо(только подключение к БД). Так как при переносе с денвера на my.mysite.com все работало.

Спустя 1 час, 54 минуты, 31 секунда (15.07.2011 - 17:22) twin написал(а):
Ну опробуй просто пример запустить на хостинге. Там есть в аттаче.
Хостинг тоже может по разному быть настроен.
Попробуй 482 строку переписать так:
           if(!mail($this->to, $this->subject, $this->multipart, $this->header) 
Убрать пятый параметр. Помогает иногда.
Цитата
Про себя: руки не доходят сделать опционально

Спустя 54 минуты, 51 секунда (15.07.2011 - 18:17) foxiSfox написал(а):
Тут видимо проблема не в вашем классе.
Тут беда другая.
Вот:


$subject = "Активация учетной записи";
$message = "Проверка отправки почты на email";

/*$message = "С Вашего электронного почтового адреса поступила заявка на
aктивацию учетной записи на сайте <b>". $_SERVER['HTTP_HOST'] ."</b><br>\n
Для доступа в аккаунт пройдите по <a href=\"".
href('cat=activate', 'id='. $hash) ."\" >этой ссылке</a><br />
и введите в поле активации этот код: <b>". $hash ."</b><br>\n
Код действителен до ". date('d.m.Y', time() + 60 * 60 * 24 * 10);

include './libs/irb_mailer.php';
$mail = new IRB_Mailer($message);

$mail -> createTo($POST['value4']);
$mail -> createSubject($subject);
$mail -> createFrom(IRB_SUPPORT_EMAIL, IRB_SUPPORT_EMAIL);
$mail -> setHtml();
$error = $mail -> sendMail();*/

$address = "PV1@yandex.ru";
if (mail($address, $subject, $message, "Content-type:text/plain; Charset=utf-8\r\n"))
echo 'Сообщение по адресу ' . $address . ' успешно отправлено!';
else
echo 'Собщение не отправлено!';



Пишет, что все отправлено, но письма нету. На gmail тоже пробовал(даже в спаме нету). Я понимаю, что это уже не относится к вашему классу, но в чем может быть проблема тогда?

Спустя 4 дня, 19 часов, 30 минут, 14 секунд (20.07.2011 - 13:47) foxiSfox написал(а):
Все заработало, когда в саппорт хостингу написал.

Спустя 2 дня, 8 часов, 30 минут, 22 секунды (22.07.2011 - 22:18) Shmalekz написал(а):
последнюю версию скрипта опробовал, на гмэил приходит нормальный текст, а хидер с глюком кодировки
на мэил.ру и текст письма и хидер с проблемами по кодировке

кодировка указана UTF-8

под проблемой с кодировкой понимаю следующее: латиница приходит нормально, а кириллица тарабарщиной

вообще, опробовал уже 3 разных скрипта из паблика по отправке почты
2 по обычной отправке функцией MAIL()
и один через SMTP

все три почту отправляют исправно, но кодировка дает сбой по кириллическим символам... подскажите в чем может быть проблема?

с уважением, Александр

Спустя 3 часа, 4 минуты, 16 секунд (23.07.2011 - 01:22) twin написал(а):
Если работает мой класс без каких-либо изменений, то стоит обратить внимание на 2 вещи.
1. В какой кодировке приходит текст (часто не обращают внимание на кодировку принимающих файлов или БД.
2. Обратиться в саппорт хостинга.

Класс опробован на десятках сайтов, в том числе и на этом форуме. Так что более подробно сложно ответить.

Спустя 9 часов, 41 минута, 51 секунда (23.07.2011 - 11:04) Shmalekz написал(а):
"в какой кодировке приходит текст"
приходит в UTF-8

в оригинале письма на гмэил есть строка
Content-type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: base64


в оригинале письма на мэил.ру такой строки нет, но системная ссылка на кодировку встречается несколько раз
=?utf-8?b?


не уверен, что проблема на стороне хостинга, т.к. пробуя скрипт на локалхосте открываемые из папки Z:\tmp\!sendmail\ письма в аутлуке не отображают кириллицу вообще, только цифры и латиницу

------

сейчас еще раз опробовал Ваш скрипт с отправкой писем на мэил ру - там проблемы с кодировкой с и в заголовке вместе с хидером (пусто вместо кириллических символов, например, вместо заголовка приходит <Без темы>), и в теле письма (тарабарщина)
на гмэил тело письма отображает кириллицу нормально, а хидер и заголовок кириллицу преобразует в тарабарщину

------

кодировка БД тоже стоит ютф-8, но тестируя скрипт подключение к БД не использую

Спустя 9 минут, 7 секунд (23.07.2011 - 11:13) Shmalekz написал(а):
кроме локалхоста скрипт опробован на инфобоксе (работает с описанными выше проблемами по кодировке)

сейчас пробовал запустить скрипт у ру-центра, выдает ошибку
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in / бла-бла-бла /includes/irb_mailer.php on line 25


опробовал скрипт на gudzonhost.ru
проблемы с кодировкой остаются, но письма приходят

я явно что-то делаю не так, но что именно понять не могу - просто последнюю версию вашего скрипта распаковываю в корень сайта, файл index.php переименовываю в mail.php
в irb_mailer.php проверяю стоит ли кодировка utf-8

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

Спустя 1 час, 38 минут, 34 секунды (23.07.2011 - 12:52) twin написал(а):
Вот специально скачал с сайта и поставил
Если здесь проблем с кодировкой нет, значит хостера нужно терзать.

Спустя 35 минут, 18 секунд (23.07.2011 - 13:27) Shmalekz написал(а):
да, у вас все работает как надо
пошел мучать саппорт


_____________
Блог | VK | GitHub | Twitch
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.