Настройка SMTP

При настройке SMTP для отправки писем всеми пользователями системы указываю значения

SmtpHost - smpt.yandex.ru
SmtpPort - 25 (587)

SmtpUserName - login или login@yandex.ru, без разницы
SmtpUserPassword - свой пароль

При попытке отправить письмо система выдаёт ошибку
The server rejected the specified sender email address. The server responded: 503 5.5.4 Error: send AUTH command first..

В чем может быть проблема?

Нравится

14 комментариев

"Салихов А" написал:smpt.yandex.ru

А если smtp.yandex.ru?

Опечатка в посте. В системе, конечно, smtp.yandex.ru :smile:

Здравствуйте.

Для решения проблемы в схеме 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 должен стоять адрес, на который настроена система. Нелогично как-то.

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

Александр, механизм ясен. Но я попробовал изменить адрес в карточке контакта, соответственно изменился адрес отправителя в карточке 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);
			}
		}

Попробовал через GMail - письмо отправляется вне зависимости от того, какой e-mail указан в карточке контакта, однако у получателя в поле адреса отправителя отображается адрес, на который настроена система..

Действительно, некоторые почтовики могут распознавать подмену адреса отправителя. В поле "От" будет адрес из карточки контакта.

Показать все комментарии