为什么不将电子邮件发送给用户?

时间:2014-01-09 18:30:33

标签: sql sql-server stored-procedures

这可能是一个简单的问题,但我看不到它。

我们有两个表,登录表和通知表。

每次用户希望恢复其密码时,用户都会将应用程序打开到浏览器,输入他或她的电子邮件地址并单击“恢复密码”按钮。

如果数据库中不存在该用户,则会向用户显示一条消息,告知用户他或她的帐户不存在 在我们的数据库上这很好。

如果信息存在,他/她应该收到包含他或她的密码的电子邮件。这就是问题所在。

用户根本没有收到电子邮件。

在下面的代码中,用户的信息从登录表中提取并插入到通知表中。

然后查询通知表,并通过此表将电子邮件发送给用户。

为什么我们这样做?

因为数据库位于我们的防火墙之外,并且无法从应用程序的位置发送电子邮件。

我们唯一的选择是使用dbmail。

我的问题是为什么这个存储过程不发送电子邮件?

它只发送给我,因为我的电子邮件地址是硬编码的。

我的代码如下,非常感谢您的帮助。

ALTER PROCEDURE [dbo].[ForgorttenPWD]
@LoginEmail  nvarchar(50) = ''
 AS    
 BEGIN
SET NOCOUNT ON;
 IF NOT EXISTS (SELECT 1 FROM [tblLogin]
WHERE email = @LoginEmail)
BEGIN
   RAISERROR ('The email address you entered does not exist on our database. Please try another email address',16,1)
   RETURN
END
INSERT into Notifications(mailContent, LoginId, FullName, email, Password, sender, Sent)
 SELECT
'This is a computer generated email message.
Dear '+ FullName +':
Please check your Mail Box for the password..
Your UserName is: '+ email +'.
Your Password is: '+ password +', 
 LoginId,
 FullName,
 email,
 Password,
  'NoReply@myemail.com',
'No'
FROM [tblLogin]
WHERE email = @LoginEmail
ORDER BY LoginId DESC

 Declare @email nvarchar(MAX),@content1 nvarchar(4000)
     SELECT top 1 @email = @email+';'+Email, @content1 = mailcontent
        FROM Notifications
    WHERE sent = 'No' and email=@LoginEmail

EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'The Registrations Office', -- defined email profile or static info
@recipients = @email, -- your email
@blind_copy_recipients = 'myemail@mycompany.com',
@subject = 'Your Account Details',
@body = @content1;
Update Notifications SET Sent = 'Yes' WHERE Sent = 'No'
END

1 个答案:

答案 0 :(得分:1)

我怀疑以下情况正在发生。在你的代码中,你是在声明,

  Declare @email nvarchar(MAX). 

紧接其下方,您将其与电子邮件列值

连接
  

...“SELECT top 1 @email = @email +';'+ Email,@ content1 = mailcontent FROM Notifications WHERE sent ='No'and email = @ LoginEmail ....”

此时@email将变为null,因为null +任何值为null。

请尝试以下方法:

 Declare @email nvarchar(MAX),@content1 nvarchar(4000)
 select @email = '', @content1 = '' -- this is the key

 SELECT top 1 @email = @email+';'+Email, @content1 = mailcontent
 FROM Notifications
 WHERE sent = 'No' and email=@LoginEmail