При настройке 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 создание объекта сервер должно быть таким:
[csharp]
var server = new SmtpServer(_credentials.Host, _credentials.UserName, _credentials.UserPassword) {
Port = _credentials.Port,
SslMode = _credentials.UseSsl ? SslStartupMode.OnConnect : SslStartupMode.Manual,
Timeout = _credentials.Timeout,
};
[/csharp]
Перед внесением изменений настоятельно рекомендую создать резервную копию базы данных.
Ещё вопрос. Судя по всему значение отправителя берется из поля 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..
Полный код метода, на всякий случай:
[csharp]
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);
}
}
[/csharp]
Действительно, некоторые почтовики могут распознавать подмену адреса отправителя. В поле "От" будет адрес из карточки контакта.