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

news/2024/5/19 23:43:30 标签: 数据库, .netcore, sqlserver

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

  • 准备需求
  • 启用SQL Server的电子邮件功能
  • 检查和测试
  • 在.net Core中调用

在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();
    }
}

http://www.niftyadmin.cn/n/117743.html

相关文章

央企集团是怎么设置信息化、数字化部门的?

在数字经济大潮中,数字化转型已不是企业的“选修课”,而是关乎企业生存和长远发展的“必修课”。在企业数字化转型中,国有企业特别是中央企业普遍将数字化转型战略作为“十四五”时期业务规划的重要内容之一,数字化能力也成为衡量…

tmux和vim

tmux 作用 分屏 允许断开Terminal连接后继续运行进程 结构 一个tmux可以开一堆session tmux: session 1, session 2, session 3 … Session: window 1, window 2, window 3… Window: pane 1, pane 2, pane 3… pane是最小单位,用shell语言编程 操作 输入…

【学习Docker(七)】详细讲解Jenkins部署SpringCloud微服务项目,Docker-compose启动

Jenkins部署SpringCloud微服务项目,Docker-compose启动 座右铭:《坚持有效输出,创造价值无限》 本文介绍使用Jenkins部署SpringCloud微服务项目,Docker-compose启动。 之前写过安装Jenkins的过程,这里就不写安装细节了…

信息系统基本知识(四)新技术

大纲 信息系统与信息化信息系统开发方法常规信息系统集成技术软件工程新一代信息技术信息系统安全技术信息化发展与应用信息系统服务管理信息系统服务规划企业首席信息管及其责任 1.5 新一代技术 1.5.1 物联网 概念:(The Internet of Things&#xf…

2023-3-3 刷题情况

保证文件名唯一 题目描述 给你一个长度为 n 的字符串数组 names 。你将会在文件系统中创建 n 个文件夹:在第 i 分钟,新建名为 names[i] 的文件夹。 由于两个文件 不能 共享相同的文件名,因此如果新建文件夹使用的文件名已经被占用&#xf…

vue3对于路由vue-router进行加载优化、打包优化(懒加载、分包)

未对vue-router进行打包优化时: 未优化的vue-router文件 export default router import { createRouter, createWebHistory, RouteRecordRaw } from vue-router import Home from "../views/Home.vue" import Help from "../views/Help.vue" …

FNIC10化学成分FNIC10性能特点

FNIC10FNIC10高碳型合碳量含量处在0.05~0.10之间,主要用于温度600度以上的,具有粗晶粒,高蠕变强度的特点,很好的机械性能和耐腐蚀性能,在化工、电力,石油化学工业中的过热器、再热器、高温加热、转化裂解炉…

项目中用到的知识点回顾---JWT(JSON Web Token)

1.JWT原理: JWT 的原理是,服务器认证以后,生成一个 JSON 对象,发回给用户,如下; {"姓名": "张三","角色": "管理员","到期时间": "2018年7月1日…