.Net Core中使用是sqlserver的邮件发送功能
- 准备需求
- 启用SQL Server的电子邮件功能
- 检查和测试
- 在.net Core中调用
在sqlsrver的管理中有一个数据库邮件功能,再此可以使用sqlserver来自动发送一些邮件,但是有一些需要插入附件的邮件则需要使用程序代码来解决,下面就是使用C#来调用sqlserver的邮件发送功能的方法.
准备需求
-
SQL Server 数据库 版本不限
-
Visual Stuail 版本不限
-
smtp服务器和账号密码
如果没有可以使用QQ邮箱的smtp服务器,具体配置看这篇文章Java邮件发送
启用SQL Server的电子邮件功能
-
在使用sqlserver的电子邮件发送功能之前,先确保在sqlserver中已经启用了电子邮件功能,可以使用以下命令查询:
SELECT * FROM sys.configurations WHERE name = 'Database Mail XPs'
如果返回结果为
0
,则需要启用电子邮件功能.可以使用以下命令启用:sp_configure 'show advanced options', 1 GO RECONFIGURE GO sp_configure 'Database Mail XPs', 1 GO RECONFIGURE GO
-
创建一个
SMTP配置文件
以用于电子邮件发送.可以使用一下命令创建SMTP配置文件EXECUTE msdb.dbo.sysmail_add_account_sp @account_name = 'MyEmailAccount', @email_address = 'myemail@example.com', @display_name = 'My Name', @mailserver_name = 'smtp.example.com', @port = 25, -- 或者其他端口号 @username = 'myusername', @password = 'mypassword', @use_default_credentials = 0 -- 如果SMTP服务器需要身份验证,请将此设置为0
请注意,如果SMTP服务器需要身份验证,请提供@username和@password参数。
-
创建一个
电子邮件配置文件
.可以使用一下命令创建:EXECUTE msdb.dbo.sysmail_add_profile_sp @profile_name = 'MyEmailProfile', @description = 'My Email Profile'
-
将SMTP配置文件添加到电子邮件配置文件中。可以使用以下命令将SMTP配置文件添加到电子邮件配置文件中:
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp @profile_name = 'MyEmailProfile', @account_name = 'MyEmailAccount', @sequence_number = 1
检查和测试
如果已经完成以上步骤则运行以下语句:
SELECT name FROM msdb.dbo.sysmail_profile;
此查询将返回所有已定义的电子邮件配置文件的名称。如果未定义任何配置文件,则将返回空结果集。
如果您没有在SQL Server中配置电子邮件,则不会看到任何结果。要配置电子邮件,请使用SQL Server Management Studio或SQL Server Management Objects (SMO)等工具,或者参考Microsoft官方文档以了解如何配置电子邮件。
使用如下语句调用发送邮件的功能
EXCE msdb.dbo.sp_send_dbmail
@profile_name '', -- 一个字符串值,表示要使用的电子邮件配置文件的名称.必需
@recipients '', --字符串,收件人地址,多个地址用';'分隔.必需
@subject '', --字符串,邮件主题.必需
@body '', -- 字符串,邮件正文.必需
@file_attachments '', --字符串,附件文件的路径(sqlserver所在服务器的绝对路径),多个文件用分号分隔.可选
@query '', -- 字符串,表示在邮件正文中包含的SQL查询.可选
@execute_query_database '', -- 字符串,执行查询的数据库名称.可选
@attach_query_result_as_file 0, -- bit类型值,表示是否将查询结果作为附件附加到邮件中.如果为1,则必须指定`@query`和`@execute_query_database`参数.可选
@query_result_width 256, -- 整数,表示查询结果作为附件添加到邮件中时列的宽度,默认256.可选
@query_result_width '', --字符串,表示查询结果作为附件添加到邮件中时列的分隔符.默认制表符.可选
@exclude_query_output '', -- 一个bit类型的值,表示是否从邮件正文中排除查询结果。默认为0。可选参数。
@mail_priority '', -- 一个整数值,表示邮件的优先级。可以是1(最低),3(普通)或5(最高)。默认为3。可选参数。
@mail_body_format '', -- 一个字符串值,表示邮件正文的格式。可以是TEXT或HTML。默认为TEXT。可选参数。
在.net Core中调用
实际原理很简单,就是使用数据库服务来调用sp_send_dbmail
这个存储过程.
using System.Data.SqlClient;
public void SendEmail()
{
string connectionString = "Data Source=server_name;Initial Catalog=database_name;User ID=user_name;Password=password";
string recipient = "recipient@example.com";
string subject = "Test Email";
string body = "This is a test email.";
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand();
command.Connection = connection;
command.CommandType = System.Data.CommandType.StoredProcedure;
command.CommandText = "msdb.dbo.sp_send_dbmail";
command.Parameters.Add("@profile_name", System.Data.SqlDbType.VarChar, 128).Value = "MyEmailProfile";
command.Parameters.Add("@recipients", System.Data.SqlDbType.VarChar, -1).Value = recipient;
command.Parameters.Add("@subject", System.Data.SqlDbType.VarChar, 255).Value = subject;
command.Parameters.Add("@body", System.Data.SqlDbType.VarChar, -1).Value = body;
connection.Open();
command.ExecuteNonQuery();
}
}