SQL Ошибка отправки почты сервера при использовании sp_send_dbmail на сервере Gmail - PullRequest
0 голосов
/ 01 марта 2020

Я настраиваю почтовое уведомление на основе триггера, и при его использовании я также получаю сообщение об ошибке.

Ниже приведены настройки профиля:

EXECUTE msdb.dbo.sysmail_add_account_sp @account_name               = 'TestMailAccount',
                                        @description                = 'Test Mail Account for sending notifications',
                                        @email_address              = 'my_gmail_id@gmail.com',
                                        @display_name               = 'Test Mail Notification',
                                        @username                   = 'my_gmail_id@gmail.com',
                                        @password                   = 'my_gmail_password',
                                        @mailserver_name            = 'smtp.gmail.com',
                                        @port                       = 587,
                                        @enable_ssl                 = 1;

EXECUTE msdb.dbo.sysmail_add_profile_sp @profile_name = 'TestMailProfile',
                                        @description = 'Main test profile used to send notification email';

EXECUTE msdb.dbo.sysmail_add_profileaccount_sp  @profile_name       = 'TestMailProfile',
                                                @account_name       = 'TestMailAccount',
                                                @sequence_number    = 2;

EXECUTE msdb.dbo.sysmail_add_principalprofile_sp
                                                @profile_name   = 'TestMailProfile',
                                                @principal_name = 'public',
                                                @is_default     = 0;

Теперь для отправки почты Я выполнил:

DECLARE @mail_body NVARCHAR(MAX);
SET @mail_body  = CONCAT(   N'<html>',
                                N'<body>',
                                    N'<h1>Test Mail</h1>',
                                N'</body>',
                            N'</html>');
EXECUTE msdb.dbo.sp_send_dbmail 
        @profile_name   = 'TestMailProfile', 
        @recipients     = 'dest@gmail.com', 
        @subject        = N'DB Test Mail', 
        @body           = @mail_body,
        @body_format    = 'HTML';

После этого я проверил журнал:

select * from sysmail_event_log

Описание показывает:

The mail could not be sent to the recipients because of the mail server failure. (Sending Mail using Account 42 (2020-03-01T18:41:09). Exception Message: Cannot send mails to mail server. (The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.0 Authentication Required. Learn more at).

Я уже включил настройку аккаунта Google за использование менее безопасного доступа к приложению.

Я не уверен, что мне не хватает, и любая помощь будет высоко оценена.

1 Ответ

0 голосов
/ 01 марта 2020

Настройки Gmail выглядят правильно. С оговоркой «попробуйте другой порт» (также упоминается в комментариях к первоначальному вопросу выше)

С https://granadacoder.wordpress.com/2006/02/08/smarter-emailsmtp-setup-with-dotnet-configuration-sections-1-1-and-2-0/

<!–Note, with the 2.0 Framework, my tests show that gmail likes port 587–>

    <smtpServer 
        smtpServerName="smtp.gmail.com" 
        defaultEmailFrom="donotreply@gmail.com" 
        portNumber="465" 
        authenicationMode="SSL" 
        smtpUserName="mygmailaddress@gmail.com" 
        smtpUserPassword="mygmailpassword"/>

Скорее всего, вы вероятно, есть блокировка порта.

https://www.microsoft.com/en-us/download/details.aspx?id=24009

Это то, что я использую для проверки связи с портами. Если вы сможете установить эту маленькую утилиту на машине с sql, она будет go далеко.

При внешнем шансе вы запускаете sql -сервер на linux. ... вы можете "apt install curl" (или аналогичный) и пинговать порт таким образом.

Но отправка электронной почты с сервера sql всегда была сложной. Вам нужны точные настройки, и вам нужны портовые (не) блоки. Чаще всего это проблема с портами.

Если вышеприведенный инструмент portqueryui сообщает о «заблокированном» или «отфильтрованном» ... возможно, вам придется открыть порт на вашем компьютере.

https://support.microsoft.com/en-us/help/4028544/windows-10-turn-windows-defender-firewall-on-or-off

Ваш маршрутизатор / сеть также может блокировать порты. Опять же, инструмент portqueryui - это быстрый способ проверить путь от машины, к которой вы пытаетесь выйти, на inte rnet -land.

...