我正在从表格中的一列中提取收件人列表,并运行存储过程sp_send_dbmail
将电子邮件发送给这些收件人。
共有约200名受助人。
具有讽刺意味的是,即使我得到的消息是邮件排队的,也只有很少的邮件被发送。数据库邮件是正确配置的,我正在使用Public
数据库配置文件。
当我检查msdb.dbo.sysmail_mailitems
表时,sent_status
列中的期望值为1,对于被传递邮件的收件人,其他收件人的值为0或2。
我完全相信收件人名单是100%正确的。我们有什么办法解决这个问题吗?
下面是我正在运行的代码:
CREATE procedure [dbo].[sp_dataRefreshNotification]
AS
BEGIN
DECLARE @ToMail VARCHAR(20)
DECLARE @Body1 VARCHAR(MAX) =
'Dear User,
Data has been refreshed.
Regards,
IT Support Team
Note: This is an auto generated e-mail, please do not reply this mail. '
SELECT DISTINCT RecipientAddress FROM dbo.RecipientAddressList
OPEN notification_cursor
FETCH NEXT FROM notification_cursor
INTO @ToMail
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC msdb.dbo.sp_send_dbmail
@profile_name ='aaaa',
@Recipients = @Tomail,
@Subject = 'Required Data',
@Body = @Body1
FETCH NEXT FROM notification_cursor
INTO @ToMail
END
CLOSE notification_cursor
DEALLOCATE notification_cursor
END
发布于 2014-08-11 10:32:25
使用等待延迟函数,它将破坏光标的每个实例。
CREATE procedure [dbo].[sp_dataRefreshNotification]
AS
BEGIN
DECLARE @ToMail VARCHAR(20)
DECLARE @Body1 VARCHAR(MAX) =
'Dear User,
Data has been refreshed.
Regards,
IT Support Team
Note: This is an auto generated e-mail, please do not reply this mail. '
SELECT DISTINCT RecipientAddress FROM dbo.RecipientAddressList
OPEN notification_cursor
FETCH NEXT FROM notification_cursor
INTO @ToMail
WHILE @@FETCH_STATUS = 0
BEGIN
Waitfor Delay '000:00:10'
EXEC msdb.dbo.sp_send_dbmail
@profile_name ='aaaa',
@Recipients = @Tomail,
@Subject = 'Required Data',
@Body = @Body1
FETCH NEXT FROM notification_cursor
INTO @ToMail
END
CLOSE notification_cursor
DEALLOCATE notification_cursor
END
发布于 2014-08-09 17:36:22
这里不需要光标,使用简单的select查询也可以完成相同的任务,请参阅下面
CREATE PROCEDURE [dbo].[sp_dataRefreshNotification]
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ToMail VARCHAR(MAX);
DECLARE @Body1 VARCHAR(MAX);
SET @Body1 = 'Dear User, ' + CHAR(10) +
'Data has been refreshed. ' + CHAR(10) +
'Regards, ' + CHAR(10) +
'IT Support Team ' + CHAR(10) + CHAR(10) +
'Note: This is an auto generated e-mail, please do not reply this mail. ' + CHAR(10)
SELECT @ToMail = COALESCE(@ToMail+';' ,'') + RecipientAddress
FROM (SELECT DISTINCT RecipientAddress
FROM dbo.RecipientAddressList) t
EXEC msdb.dbo.sp_send_dbmail @profile_name ='aaaa'
,@Recipients = @Tomail
,@Subject = 'Required Data'
,@Body = @Body1
END
发布于 2022-02-09 10:32:44
如果你真的需要发送一个单独的电子邮件给每个人,那么你的方法是好的使用循环和WAITFOR延迟'00:00:10‘在循环中。但是如果你能给所有的人发一封电子邮件,那么你就可以把这些邮件连在一起。只有最多255个字符的串联电子邮件可以在收件人框中。因此,您必须将得到的字符串拆分为更少的255个字符。
https://stackoverflow.com/questions/25219812
复制相似问题