При настройке SMTP для отправки писем всеми пользователями системы указываю значения
SmtpHost - smpt.yandex.ru
SmtpPort - 25 (587)
SmtpUserName - login или
SmtpUserPassword - свой пароль
При попытке отправить письмо система выдаёт ошибку
The server rejected the specified sender email address. The server responded: 503 5.5.4 Error: send AUTH command first..
В чем может быть проблема?
Нравится
"Салихов А" написал:smpt.yandex.ru
А если smtp.yandex.ru?
Здравствуйте.
Для решения проблемы в схеме SmtpClient в методе SendMessage создание объекта сервер должно быть таким:
var server = new SmtpServer(_credentials.Host, _credentials.UserName, _credentials.UserPassword) { Port = _credentials.Port, SslMode = _credentials.UseSsl ? SslStartupMode.OnConnect : SslStartupMode.Manual, Timeout = _credentials.Timeout, };
Перед внесением изменений настоятельно рекомендую создать резервную копию базы данных.
Ещё вопрос. Судя по всему значение отправителя берется из поля E-mail контакта, который создаёт новое письмо. Однако параметры SMTP настраиваются только на один почтовый ящик.
Значит ли это, что пользователи системы могут отправлять письма только с одного ящика?
Да, именно так. Отправка происходит с одного почтового ящика, который указан в системных настройках.
Не совсем. Отправка, действительно, происходит с одного ящика, а в карточке можно указать реальный адрес контакта и тогда физически он отправит письмо с ящика который фигурирует в системных настройках, а в письме будет указано, что с того, который - в карточке контакта.
Александр, механизм ясен. Но я попробовал изменить адрес в карточке контакта, соответственно изменился адрес отправителя в карточке E-mail и при попытке отправить письмо я получил ошибку
The server rejected the specified sender email address. The server responded: 553 5.7.1 Sender address rejected: not owned by auth user..
Полный код метода, на всякий случай:
public void SendMessage(MailMessage message) { try { var client = new Smtp(); client.Charset = "utf-8"; var server = new SmtpServer(_credentials.Host, _credentials.UserName, _credentials.UserPassword) { Port = _credentials.Port, AccountName = _credentials.UserName, Password = _credentials.UserPassword, SslMode = _credentials.UseSsl ? SslStartupMode.OnConnect : SslStartupMode.Manual, Timeout = _credentials.Timeout, }; server.SmtpOptions = ExtendedSmtpOptions.NoChunking; client.SmtpServers.Add(server); client.Message = message; client.Send(); } catch (MailBeeSmtpNoAcceptedRecipientsException e) { throw new SmtpException("ErrorOnSend", NoAcceptedRecipientsError, e); } catch (Exception e) { throw new SmtpException("ErrorOnSend", e.Message, e); } }
Действительно, некоторые почтовики могут распознавать подмену адреса отправителя. В поле "От" будет адрес из карточки контакта.