.Net Core中使用是SQL Server的邮件发送功能


在sqlsrver的管理中有一个数据库邮件功能,再此可以使用sqlserver来自动发送一些邮件,但是有一些需要插入附件的邮件则需要使用程序代码来解决,下面就是使用C#来调用sqlserver的邮件发送功能的方法.

准备需求

  1. SQL Server 数据库 版本不限

  2. Visual Stuail 版本不限

  3. smtp服务器和账号密码

    如果没有可以使用QQ邮箱的smtp服务器,具体配置看这篇文章Java邮件发送

启用SQL Server的电子邮件功能

  1. 在使用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
    
  2. 创建一个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参数。

  3. 创建一个电子邮件配置文件.可以使用一下命令创建:

    EXECUTE msdb.dbo.sysmail_add_profile_sp
    @profile_name = 'MyEmailProfile',
    @description = 'My Email Profile'
    
  4. 将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();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值