首页 > 解决方案 > 无法从 SQL Server 2012/2014/2016 中的 SQL 查询发送电子邮件

问题描述

我从向导中配置了数据库邮件并能够获取电子邮件警报。

在此处输入图像描述

当我编写以下查询时:

DECLARE @IsFileExists INT   
EXEC Master.dbo.xp_fileexist 'g:\abc.bak', @IsFileExists OUT  

BEGIN  
    IF @IsFileExists = 1  
    BEGIN  
        PRINT 'File Exists in the G:\ location'  
    END  
    ELSE  
    BEGIN
        DECLARE @htmlbody VARCHAR(4000)

        EXEC msdb.dbo.sp_send_dbmail
                  @profile_name = 'EMAIL',
                  @recipients = 'ylx@xly.com',
                  @subject = 'Database Mail Test'
        PRINT 'File Does not Exist in the G:\ location'
    END --IF
END

我没有收到任何电子邮件警报:

这是输出:

(受影响的 1 行)
邮件(ID:1065)排队。
g:\ 位置中不存在文件

在此处输入图像描述

描述:由于邮件服务器故障,无法将邮件发送给收件人。(使用帐户 1 (2019-12-11T19:00:19) 发送邮件。异常消息:无法向邮件服务器发送邮件。(发送邮件失败。)。)

所有 SQL 服务都在运行,以 sysadmin 用户身份执行脚本。有人可以建议:

标签: sqlsql-serversql-server-2008sql-server-2012sql-server-2016

解决方案


该消息来自 SMTP 服务器,而不是 DBMail。

这不是 DBMail 问题。该消息指示收件人电子邮件地址不存在。检查您的电子邮件地址。

如此处所述

一些建议的故障排除步骤:

  1. 尝试使用与 SQL Server 相同的机器,使用 Outlook 等客户端邮件程序,通过同一 SMTP 服务器发送消息。您可能会收到更有意义的错误消息。

  2. 端口可能被阻塞。尝试使用端口 587 将邮件发送到任何其他 SMTP 服务器。

  3. 尝试更改为端口 465。

  4. 尝试取消选中您个人资料中的“需要安全连接”位。

  5. 尝试使用网络中的 SMTP 服务器中继到 GMail。这可能更容易设置和运行。如果您没有可用于处理中继的本地 SMTP 服务器,则需要安装 IIS 和 SMTP 组件。

  6. 查看http://mail.google.com/support/bin/answer.py?hl=en&answer=13287

如果您使用的是 GMAIL,请注意以下额外步骤:

打开您不太安全的应用程序以使用您的帐户,这就是数据库邮件可以访问您的 gmail SMTP 帐户的方式。

尝试使用以下代码发送测试邮件:

    USE msdb
    GO
    EXEC sp_send_dbmail @profile_name='XXX', -- Your profile name
    @recipients='abc@yahoo.com', -- Recipient's email address
    @subject='Test message',
    @body='This is the body of the test message.'

最后,尝试运行以下查询以查看其是否已发送

    SELECT * FROM sysmail_log

推荐阅读