【问题标题】:Unable to send an email from SQL Query in SQL Server 2012/2014/2016无法从 SQL Server 2012/2014/2016 中的 SQL 查询发送电子邮件
【发布时间】:2020-04-05 08:34:20
【问题描述】:

我通过向导配置了数据库邮件并且能够获得电子邮件警报。

当我编写以下查询时:

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 用户身份执行脚本。 有人可以建议:

【问题讨论】:

  • 请发布异常消息,它在您的屏幕截图中不可见或不可读。
  • smtp.xly.com 使用匿名身份验证?所以你已经独立测试过了,你知道它有效吗?
  • 我严重怀疑任何电子邮件服务器都会允许匿名使用。并选择一个引擎——你不能——在这一点上——使用多个版本。您标记的版本与您在主题中放置的版本不匹配没有帮助。
  • @robbpriestley:是的,尝试了匿名身份验证。独立测试并且它可以工作。但是当我在查询中执行它时没有。
  • 那是你的问题?你一开始就不能通过那个 SMTP 服务器发送邮件吗?您上面的屏幕截图清楚地表明您正在使用匿名身份验证。

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


【解决方案1】:

该邮件来自 SMTP 服务器,而不是 DBMail。

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

如上所述here

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

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

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

  3. 尝试更改为端口 465。

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

  5. 尝试使用网络中的 SMTP 服务器中继到 GMail。这可能更容易设置和运行。你需要安装 IIS 和 SMTP 组件(如果您没有本地 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

【讨论】:

  • 我也在想,也许是因为@aditya y 报告能够通过服务器发送邮件,也许这只是本地机器被列入白名单的地方,但 MSSQL 机器不是。只是一个猜测,但邮件服务器允许匿名访问是如此不寻常。这让我觉得也许还有其他一些安全机制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-17
相关资源
最近更新 更多