SQL Server中发送HTML格式邮件的方法
介绍
SQL Server(2000及之后的版本)提供了发送电子邮件的功能,可以使用 T-SQL 语句或存储过程发送邮件。本文将介绍如何在 SQL Server 中发送 HTML 格式的邮件。
配置SMTP服务器
要发送邮件,SQL Server 需要访问一个 SMTP 服务器。在 SQL Server 管理器里,选择 SQL Server Agent,右键选择 Properties,选择 Alert System,将 Mail system 设置为 SQL Mail,在 Mail session 选项中填写 SMTP 服务器的信息,如下所示:
EXECUTE msdb.dbo.sysmail_configure_sp
@account_name = 'MySMTPAccount',
@smtp_server = 'smtp.gmail.com',
@smtp_port = 587,
@smtp_authenticate = 'true',
@smtp_username = 'myemail@gmail.com',
@smtp_password = 'mypassword',
@enable_ssl = 'true';
上面的代码将 SMTP 服务器设置为 Gmail,并使用 SSL 进行加密。如果需要使用其他的 SMTP 服务器,只需要修改 @smtp_server 和 @smtp_port 参数即可。
准备HTML格式的邮件内容
发送 HTML 格式的邮件需要准备一份 HTML 文件,下面是一个简单的例子:
<html>
<head>
<title>Testing HTML Email</title>
</head>
<body>
<p>这是一封测试邮件。</p>
<p><strong>Hello world!</strong></p>
</body>
</html>
上面的代码包含了 HTML 的基本结构和两个段落。第二个段落使用 strong 标签将文字加粗。注意,邮件中的样式应该尽量简单,以免在不同的邮件客户端中出现兼容性问题。
使用sp_send_dbmail存储过程发送邮件
使用 sp_send_dbmail 存储过程发送邮件,下面是一个简单的例子:
DECLARE @body NVARCHAR(MAX);
SET @body = N'这是一封测试邮件。';
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'MySMTPAccount',
@recipients = 'myemail@gmail.com',
@subject = 'Testing HTML Email',
@body = @body,
@body_format = 'HTML',
@file_attachments = 'C:\path\to\html\file.html';
上面的代码将准备好的 HTML 文件作为邮件正文发送。其中,@profile_name 参数指定了使用哪个 SMTP 服务器进行发送,@recipients 参数指定了收件人,@subject 参数指定了邮件主题,@body 参数指定了邮件正文内容,@body_format 参数指定了邮件正文格式,@file_attachments 参数指定了要附加的文件(可以省略)。
使用sp_OA%系列存储过程发送邮件
如果没有配置 SMTP 服务器,也可以使用 sp_OA% 系列的存储过程发送邮件,下面是一个简单的例子:
DECLARE @body NVARCHAR(MAX);
SET @body = N'这是一封测试邮件。';
EXEC sp_OACreate 'CDO.Message', @obj OUT;
EXEC sp_OASetProperty @obj, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserver")', 'smtp.gmail.com';
EXEC sp_OASetProperty @obj, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport")', 587;
EXEC sp_OASetProperty @obj, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusing")', 2;
EXEC sp_OASetProperty @obj, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate")', 1;
EXEC sp_OASetProperty @obj, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusername")', 'myemail@gmail.com';
EXEC sp_OASetProperty @obj, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendpassword")', 'mypassword';
EXEC sp_OASetProperty @obj, 'To', 'myemail@gmail.com';
EXEC sp_OASetProperty @obj, 'From', 'myemail@gmail.com';
EXEC sp_OASetProperty @obj, 'Subject', 'Testing HTML Email';
EXEC sp_OASetProperty @obj, 'HTMLBody', @body;
EXEC sp_OASetProperty @obj, 'BodyFormat', 0;
EXEC sp_OASetProperty @obj, 'Fields.Update';
EXEC sp_OAMethod @obj, 'Send', NULL;
EXEC sp_OADestroy @obj;
上面的代码使用 sp_OACreate 创建了一个 CDO.Message 对象,在该对象上设置了 SMTP 服务器的信息、收件人、发件人、邮件主题、邮件正文等属性,最后调用 Send 方法发送邮件。如果需要添加附件,可以使用 sp_OASetProperty @obj, 'AddAttachment', 'C:\path\to\attachment.ext' 方法。使用 sp_OA% 系列存储过程发送邮件需要启用 OLE Automation Procedures。执行以下语句可以启用 OLE Automation Procedures:
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'Ole Automation Procedures', 1;
RECONFIGURE;
总结
SQL Server 提供了两种方式发送 HTML 格式的邮件:使用 sp_send_dbmail 存储过程和使用 sp_OA% 系列存储过程。前者需要配置 SMTP 服务器,后者则不需要。在实际使用中,应该根据具体情况选择适合的方式。