该是时候了解如何建立一个Database Mail账户了。在我们的例子中,我假设你正坐在一台你具有系统管理员访问权限的开发机器前。如果你没有系统管理员权限,你需要成为msdb数据库DatabaseMailUserRole的一员。
下面的脚本建立一些我在整个实例中都要用到的变量。注意:整个脚本将在msdb数据库中运行,Database Mail对象就保存在其中。
USE msdb
GO
DECLARE @ProfileName VARCHAR(255)
DECLARE @AccountName VARCHAR(255)
DECLARE @SMTPAddress VARCHAR(255)
DECLARE @EmailAddressVARCHAR(128)
DECLARE @DisplayUser VARCHAR(128) |
这里我建立了ProfileName、AccountName、STMP服务器名称以及显示在电子邮件From(邮件来自)框中的地址。
SET @ProfileName = 'DBMailProfile';
SET @AccountName = 'DBMailAccount';
SET @SMTPAddress = 'mail.yoursmtpserver.com';
SET @EmailAddress = 'DBMail@yoursmtpserver.com';
SET @DisplayUser = 'The Mail Man'; |
下面的的脚本完成一些清理工作,以便如果我再次运行脚本,就不必担心出现错误。
IF EXISTS
(
SELECT * FROM msdb.dbo.sysmail_profileaccount pa
JOIN msdb.dbo.sysmail_profile p ON pa.profile_id = p.profile_id
JOIN msdb.dbo.sysmail_account a ON pa.account_id = a.account_id
WHERE
p.name = @ProfileName AND
a.name = @AccountName)
BEGIN
PRINT 'Deleting Profile Account'
EXECUTE sysmail_delete_profileaccount_sp
@profile_name = @ProfileName,
@account_name = @AccountName
END
IF EXISTS
(
SELECT * FROM msdb.dbo.sysmail_profile p
WHERE p.name = @ProfileName
)
BEGIN PRINT 'Deleting Profile.'
EXECUTE sysmail_delete_profile_sp
@profile_name = @ProfileName
END
IF EXISTS
(
SELECT * FROM msdb.dbo.sysmail_account a
WHERE a.name = @AccountName
)
BEGIN PRINT 'Deleting Account.'
EXECUTE sysmail_delete_account_sp
@account_name = @AccountName
END |
下面的脚本给系统增加账户(Account)、用户资料(Profile)和账户-用户资料(Account-Profile)关系。
EXECUTE msdb.dbo.sysmail_add_account_sp
@account_name = @AccountName,
@email_address = @EmailAddress,
@display_name = @DisplayUser,
@mailserver_name = @SMTPAddress
EXECUTE msdb.dbo.sysmail_add_profile_sp
@profile_name = @ProfileName
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
@profile_name = @ProfileName,
@account_name = @AccountName,
@sequence_number = 1 ; |
现在一切都已经准备妥当,我将发送一封测试电子邮件。
EXEC msdb.dbo.sp_send_dbmail
@recipients=N'chapman.tim@gmail.com',
@body= 'Test Email Body',
@subject = 'Test Email Subject',
@profile_name = @ProfileName |
要检查消息是否发送成功,我可以对sysmail_allitems系统视图执行一次查询。
SELECT * FROM sysmail_allitems |