исправлено Отправка писем через SMTP

Dr_Brown

Пользователь
#1
Доброго дня.

У меня домен кирилический, в связи с этим есть проблема при доставке почты, на некоторые почтовые службы. Почта либо ложиться в спам, либо вообще не доходит.

Подключил домен к Яндексу, прошел верификацию и прочее, добавил mx запись, srv и dkim в свои dns по рекомендации Яндекса. Настроил ящик:

[email protected]мой.домен.

Настраиваю отправку через smtp в конфиге:

Код:
$bb_cfg['smtp_delivery']           = true; // send email via a named server instead of the local mail function
$bb_cfg['smtp_ssl']                = true; // use ssl connect
$bb_cfg['smtp_host']               = 'smtp.yandex.ru';    // SMTP server host
$bb_cfg['smtp_port']               = 465;    // SMTP server port
$bb_cfg['smtp_username']           = '[email protected]';    // enter a username if your SMTP server requires it
$bb_cfg['smtp_password']           = '*********';    // enter a password if your SMTP server requires it

$bb_cfg['board_email']             = '[email protected]'; // admin email address
$bb_cfg['board_email_form']        = false;        // can users send email to each other via board
$bb_cfg['board_email_sig']         = 'Администрация Трекера';   // this text will be attached to all emails the board sends
$bb_cfg['board_email_sitename']    = $domain_name; // sitename used in all emails header
При попытке регистрации юзера, и отправке ему почты, получаю:

Ran into problems sending mail. Response: 504 5.5.2 Recipient address rejected: need fully-qualified address

Что я делаю не так ?

В факе яндекса написано по этой ошибке, что типа проверьте наличие левых символов в адресе получателя?

Помогите настроите отправку через SMTP кто уже юзал такое....
 

Dr_Brown

Пользователь
#2
нашел на яндексе тока на ангийском

“No correct recipients”, “Bad recipient address syntax”, “Bad address mailbox syntax”, “Recipient address rejected: need fully-qualified address”
These notifications indicate that there was an incorrect email address among the list of recipients. For example, “theodore” was written in the “To” field instead of the full email address [email protected]. Check the email addresses for errors, extra spaces, punctuation marks etc.

The following are examples of common typos in email addresses:

 

Exile

Администратор
#3
Кто-то в чате разработчиков высказывался уже с такой проблемой. Будет замена класса отправки электронной почты на зендовский, там такого не будет. Нужно немного подождать.
 

Dr_Brown

Пользователь
#4
Exile, я не обновляюсь больше чем r.600...как я понимаю проблема Recipient to, т.е. адрес получателя не правильно подставляется.
Может подскажешь заплатку ?
 

Exile

Администратор
#5
@Dr_Brown не подскажу, не видя проблемное письмо на котором стопорится ничего конкретно не скажешь, а перелопачивать компонент на удаление смысла уже не вижу. И про необновление выше 600 очень зря - уже по сравнению с 600 изменений много в последних версиях. Чего только это стоит:

Please Login or Register to view hidden text.

 

Dr_Brown

Пользователь
#6
открыл, smtp.php

вот кусок за респт отвечающий

Код:
// Add an additional bit of error checking to the To field.
    $mail_to = (trim($mail_to) == '') ? 'Undisclosed-recipients:;' : trim($mail_to);
    if (preg_match('#[^ ]+\@[^ ]+#', $mail_to))
    {
        fputs($socket, "RCPT TO: <$mail_to>\r\n");
        server_parse($socket, "250", __LINE__);
    }
добавил die($mail_to); вот так

Код:
// Add an additional bit of error checking to the To field.
    $mail_to = (trim($mail_to) == '') ? 'Undisclosed-recipients:;' : trim($mail_to);
    die($mail_to);
    if (preg_match('#[^ ]+\@[^ ]+#', $mail_to))
    {
        fputs($socket, "RCPT TO: <$mail_to>\r\n");
        server_parse($socket, "250", __LINE__);
    }
Получил на выхлопе, что в $mail_to передается логин регавшегося юзера, естно сервер яндекса отклоняет такое мыло )))

Почему не передается указанный адрес элетронной почты, не пойму.
 

Exile

Администратор
#7
@Dr_Brown в файле library/includes/ucp/register.php:
Есть пара строк:
PHP:
$emailer->email_address("$username <$email>");
Попробуй заменить последовательно на:
PHP:
$emailer->email_address($username . "<" . $email . ">");
Или:
PHP:
$emailer->email_address("<" . $email . ">");
Уйдет ли проблема с первой заменой? По логике 100% должна со второй, но все же.
 

Dr_Brown

Пользователь
#8
В 1-м случае, также передается имя пользователя.
Во 2-м случае, вообще ничего передается.
Пусто.
Получаю ошибку от яндекса, bad syntaxis
 

Exile

Администратор
#9
@Dr_Brown тогда попробуй:
PHP:
$emailer->email_address($username . "<" . $db_data['user_email'] . ">");
Скорее всего реально баг...

Только во втором месте не db_data, а pr_data:
PHP:
                $emailer->use_template('user_activate', $pr_data['user_lang']);
                $emailer->email_address($username . "<" . $pr_data['user_email'] . ">");
 
Последнее редактирование:

Dr_Brown

Пользователь
#10
Второе место там де редактирование профиля имеется в виду?

а ничего что в этом запросе мыло не берем из базы?

$sql = "
SELECT
user_id,
user_rank,
user_level,
$profile_fields_sql
FROM ". BB_USERS ."
WHERE user_id = $pr_user_id
LIMIT 1
";
 
Последнее редактирование:
Сверху