当前位置: 首页 > 面试题库 >

使用sp_send_dbmail的存储过程将电子邮件发送给从数据库查询的多个收件人

田文景
2023-03-14
问题内容

就像标题所说的那样,我正在尝试创建一个存储过程,该过程用于将电子邮件发送到数据库中存储的地址,通常包括多个收件人。我已经尝试了一些方法来解决这个问题,但是我想我遇到了麻烦,并且感谢任何人提供的任何信息。我遇到的主要问题是查询数据库中的地址,然后以一种有效的方式将其传递给sp_send_dbmail。

地址表非常简单,看起来像这样,但是更大。两列都是varchars:

idNumber   |  email
__________________________
   a123    |  steve@test.com
   a123    |  carol@test.com
   1-100   |  mary@test.com

因此,如果我们要发送ID号为“ a123”的电子邮件,则需要同时发送给史蒂夫和卡罗尔的电子邮件。

这是一个超级简单的过程。这不是逐字记录的,因为这一切都在我的工作计算机上,而是更多我所要追求的骨架。

CREATE PROCEDURE sendMail
  @idNumber varchar(MAX),
  @subject varchar(MAX),
  @body varchar(MAX)
EXEC msdb.dbo.sp_send_dbmail
  @recipients = "EXEC SELECT email FROM emailTable WHERE idNumber = " + @idNumber + "';",
  @subject = @subject,
  @body = @body;

抛出错误。它似乎不喜欢将ID参数连接到查询中。我尝试制作一个单独的过程来查询电子邮件,但是将ID参数传递给该过程似乎也不起作用。即使我确实成功传递了参数并使查询成功执行,我仍然需要将两个结果连接到单个字符串中,并用分号定界,以便它们与sp_send_dbmail配合使用。我认为?

SQL向导,您将如何处理?我没有狂野的经验,所以我做错了什么简单的语法吗?我的方法从根本上有缺陷吗?

感谢您的投入。谢谢你。

编辑: 这是Kritner的有效html" target="_blank">解决方案!谢谢一堆!

CREATE PROCEDURE testMail2
@idNumber varchar(MAX)
AS
BEGIN
DECLARE @recipientList varchar(MAX)
SET @recipientList = (STUFF((SELECT ';' + email FROM emailTable WHERE idNumber = @idNumber FOR XML PATH(' ')),1,1,''))
EXEC msdb..sp_send_dbmail
@recipients=@recipientList,
@subject='Subject Line',
@body='Body Text'
END

问题答案:

您可以执行查询并将值分配给变量,如下所示:

DECLARE @myRecipientList varchar(max)
SET @myRecipientList = (STUFF((SELECT ';' + emailaddress FROM table FOR XML PATH('')),1,1,''))

这会将您的@myRecipientLIst设置为“;” 分隔的收件人列表指定了您的查询。

您也可以使用SP执行相同的想法,只需将它们放入临时/变量表和stuff半冒号分隔的列表中即可。

编辑:

最后,您可以发送邮件:

EXEC msdb.dbo.sp_send_dbmail
  @recipients = @recipientList,
  @subject = @subject,
  @body = @body // ........

注释编辑:

根据您的原始查询,您的填充查询应如下所示:

DECLARE @myRecipientList varchar(max)
SET @myRecipientList = STUFF((SELECT ';' + email FROM emailTable WHERE idNumber = @idNumber FOR XML PATH('')),1,1,'')

这背后的想法是-对于在电子邮件表中找到的每封电子邮件,将找到的电子邮件和半冒号附加到@myrecipientList。



 类似资料:
  • 问题内容: 我有一些PHP代码,用于将表单发送到特定的电子邮件地址。但是,我想在PHP发送时再添加几个电子邮件地址。我怎样才能做到这一点? 谢谢。 问题答案: 这将起作用:

  • 问题内容: 我尝试将邮件从python发送到从.txt文件导入的多个电子邮件地址,我尝试了differend语法,但是没有任何效果… 编码: 因此,我尝试了此操作以从.txt文件导入收件人地址: mainList.txt包含: 但这行不通… 我也尝试做: 和 有谁知道该怎么办? 非常感谢! 问题答案: 并将每个收件人放在自己的 行上 (即以换行符分隔)。

  • 我正在尝试使用CodeIgniter的电子邮件库发送电子邮件。这是我写的代码。 错误:这是我得到的错误。 遇到以下SMTP错误:0php_network_getaddresses:getaddrinfo失败:名称或服务未知无法发送数据:AUTH LOGIN发送AUTH LOGIN命令失败。错误:无法发送数据:邮件从:从:遇到以下SMTP错误:无法发送数据:RCPT TO:到:遇到以下SMTP错误:

  • 问题内容: 问题答案: $config = Array( ‘protocol’ => ‘smtp’, ‘smtp_host’ => 'ssl://smtp.googlemail.com’, ‘smtp_port’ => 465, ‘smtp_user’ => ‘xxx’, ‘smtp_pass’ => ‘xxx’, ‘mailtype’ => ‘html’, ‘charset’ => ‘iso-8

  • 问题内容: 我正在使用Apache Commons电子邮件库发送电子邮件,但无法通过GMail SMTP服务器发送电子邮件。 任何人都可以提供适用于GMail SMTP服务器和其他服务器的示例代码吗? 我正在使用以下无效的代码: 问题答案: 将电子邮件发送到GMail SMTP服务器需要身份验证和SSL。用户名和密码非常简单。确保设置了以下属性以启用身份验证和SSL,并且该属性应该可以正常工作。

  • 如何在数据库中存储该电子邮件的唯一ID。 我尝试了$概述=imap_fetch_overview($inbox,$email_number,0);我收到了一堆数字,但问题是当其中一封电子邮件被删除时,数字会发生变化。 如何正确存储?MD5消息还是什么? 基本上,我试图在我的个人网络应用程序上接收电子邮件,在那里我可以管理和访问我自己的电子邮件。它使用imap调用gmail。 无论如何,我可以在哪里