当前位置: 首页 > news >正文

SQL Server 数据库邮件配置失败:SMTP 连接与权限问题

问题现象
配置数据库邮件时,发送测试邮件失败,提示 “邮件无法发送到 SMTP 服务器,操作超时”(错误 14661)或 “服务器拒绝发件人地址”(错误 15009)。


快速诊断
  1. 检查数据库邮件配置状态

    -- 查看邮件配置是否启用
    SELECT name, is_value_default 
    FROM sys.configurations 
    WHERE name = 'Database Mail XPs';
    -- 检查邮件账户信息
    EXEC msdb.dbo.sysmail_help_account_sp;
  2. 验证 SMTP 服务器连接性

    # 测试 SMTP 端口连通性(如 25、587)
    Test-NetConnection -ComputerName smtp.example.com -Port 587
    # 检查 TLS 证书信任(若使用 SSL)
    openssl s_client -connect smtp.example.com:587 -starttls smtp
  3. 排查身份验证信息

    • 确保 SMTP 账户密码未过期,且未启用双因素认证。

    • 确认发件人邮箱地址(如 noreply@example.com)已在 SMTP 服务器注册。


解决方案
步骤 1:配置数据库邮件基本参数
  1. 启用数据库邮件功能

    EXEC sp_configure 'show advanced options', 1;
    RECONFIGURE;
    EXEC sp_configure 'Database Mail XPs', 1;
    RECONFIGURE;
  2. 创建邮件账户与配置文件

    -- 创建邮件账户
    EXEC msdb.dbo.sysmail_add_account_sp@account_name = 'PrimarySMTP',@email_address = 'noreply@example.com',@display_name = 'SQL Alerts',@mailserver_name = 'smtp.example.com',@port = 587,@enable_ssl = 1,@username = 'smtp_user',@password = 'SecureP@ss!123';-- 创建配置文件并关联账户
    EXEC msdb.dbo.sysmail_add_profile_sp@profile_name = 'DBA_Notifications';
    EXEC msdb.dbo.sysmail_add_profileaccount_sp@profile_name = 'DBA_Notifications',@account_name = 'PrimarySMTP',@sequence_number = 1;
步骤 2:修复 SMTP 连接问题
  1. 调整 SMTP 超时设置

    -- 修改数据库邮件系统参数(默认 60 秒)
    EXEC msdb.dbo.sysmail_configure_sp @parameter_name = 'AccountRetryDelay',@parameter_value = 10;  -- 重试延迟(秒)
    EXEC msdb.dbo.sysmail_configure_sp @parameter_name = 'AccountRetryAttempts',@parameter_value = 3;   -- 最大重试次数
  2. 配置 TLS/SSL 加密

    • 若 SMTP 服务器要求 SSL,导入证书并绑定:

      Import-Certificate -FilePath "C:\Certs\smtp.cer" -CertStoreLocation Cert:\LocalMachine\Root
    • 修改账户配置启用加密:

      EXEC msdb.dbo.sysmail_update_account_sp @account_name = 'PrimarySMTP',@enable_ssl = 1;
步骤 3:处理防火墙与权限问题
  1. 放行 SMTP 端口

    New-NetFirewallRule -DisplayName "SMTP-Outbound" -Direction Outbound -Protocol TCP -RemotePort 587 -Action Allow
  2. 授予 SQL Server 服务账户代理权限

    • 若使用域账户发送邮件,确保服务账户在 AD 中具有 允许委派 权限。

    • 本地账户需在 SMTP 服务器白名单中。


验证与日志分析
  1. 手动发送测试邮件

    EXEC msdb.dbo.sp_send_dbmail@profile_name = 'DBA_Notifications',@recipients = 'admin@example.com',@subject = 'Test Email',@body = 'SMTP Configuration Test';
  2. 检查邮件队列状态

    -- 查看未发送邮件
    SELECT * FROM msdb.dbo.sysmail_allitems WHERE sent_status = 'failed';
    -- 查看详细错误日志
    SELECT * FROM msdb.dbo.sysmail_event_log ORDER BY log_date DESC;
  3. 分析 SMTP 服务器日志

    • 检查 SMTP 服务器(如 Exchange)的接收连接器日志,确认 SQL Server IP 未被拦截。


扩展场景:高可用性环境配置
  • 问题示例Always On 可用性组节点无法发送邮件

  • 解决方案

    1. 在所有节点同步邮件配置

      -- 导出配置脚本并在辅助节点执行
      EXEC msdb.dbo.sysmail_help_account_sp;
      EXEC msdb.dbo.sysmail_help_profile_sp;
    2. 配置负载均衡 SMTP 端点

      EXEC msdb.dbo.sysmail_update_principalprofile_sp@principal_name = 'public',@profile_name = 'DBA_Notifications',@is_default = 1;

安全加固建议
  1. 使用专用服务账户

    • 为数据库邮件创建独立低权限账户(如 smtp_relay@example.com),避免使用管理员邮箱。

  2. 启用邮件内容审核

    -- 配置邮件审核规则
    EXEC msdb.dbo.sysmail_add_principalprofile_sp@principal_name = 'dbo',@profile_name = 'DBA_Notifications',@is_default = 0,@description = 'Restricted to audit';
  3. 定期清理邮件日志

    -- 自动保留最近 30 天日志
    EXEC msdb.dbo.sysmail_delete_log_sp @logged_before = '2023-01-01';
    EXEC msdb.dbo.sysmail_delete_mailitems_sp @sent_before = '2023-01-01';

通过以上步骤,可系统性解决数据库邮件配置问题。若使用云服务(如 Office 365),需启用 SMTP 客户端提交 权限并禁用基础认证。生产环境中建议配置 邮件发送速率限制,避免被标记为垃圾邮件。

相关文章:

SQL Server 数据库邮件配置失败:SMTP 连接与权限问题

问题现象: 配置数据库邮件时,发送测试邮件失败,提示 “邮件无法发送到 SMTP 服务器,操作超时”(错误 14661)或 “服务器拒绝发件人地址”(错误 15009)。 快速诊断 检查数据库邮件配置…...

深入浅出动态规划:从基础到蓝桥杯实战(Java版)

引言:为什么你需要掌握动态规划? 动态规划(DP)是算法竞赛和面试中的常客,不仅能大幅提升解题效率(时间复杂度通常为O(n)或O(n))[4],更是解决复杂优化问题的利器。统计显示&#xff…...

获取cookie的chrome插件:Get cookies.txt LOCALLY

接上一篇,在下载视频的时候需要网站的cookie,下面介绍一款可以获取网站cookie的chrome插件 https://chromewebstore.google.com/detail/get-cookiestxt-locally/cclelndahbckbenkjhflpdbgdldlbecc?utm_sourceitem-share-cb 备注需要科学上网 【使用方…...

opencv无法设置禁用RGB转换问题

树莓派连接摄像头,摄像头输出格式为YUYV(YUV422)。 通过执行 v4l2-ctl --list-formats --device/dev/video0 可以看的具体的摄像头的数据格式。 使用opencv获取视频流,通过cap.set(cv2.CAP_PROP_CONVERT_RGB, 0)设置禁用自动转换RGB格式,但是打印输出…...

Ansible:roles角色

文章目录 Roles角色Ansible Roles目录编排Roles各目录作用创建 roleplaybook调用角色调用角色方法1:调用角色方法2:调用角色方法3: roles 中 tags 使用实战案例 Roles角色 角色是ansible自1.2版本引入的新特性,用于层次性、结构化…...

SAP系统采购信息记录失效

问题:采购信息记录失效 现象:最初主数据导入完成之后,单元测试的时采购信息记录是有效的,中间经过配置的变化,集成测试初期发现采购信息记录全部失效。 原因: 单元测试时发现采购订单里面的条件类型…...

JavaWeb 课堂笔记 —— 04 Ajax

本系列为笔者学习JavaWeb的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员JavaWeb开发教程,实现javaweb企业开发全流程(涵盖SpringMyBatisSpringMVCSpringBoot等)》,章节分布参考视频教程,为同样学习…...

Pandas 库

Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够…...

4.8学习总结

完成摆动序列的算法题(比较难,想不出方法) 学习了HashMap,TreeMap 的源码(看完一遍对其理解没有太清楚,还需再多刷几遍理解源码及其底层逻辑的概念) 学习了可变参数和Collections工具类...

C语言之九九乘法表

一、代码展示 二、运行结果 三、代码分析 首先->是外层循环是小于等于9的 然后->是内层循环是小于等于外层循环的 最后->就是\n让九九乘法表的格式更加美观(当然 电脑不同 有可能%2d 也有可能%3d) 四、与以下素数题目逻辑相似 五、运行结果...

【Linux操作系统】:信号

Linux操作系统下的信号 一、引言 首先我们可以简单理解一下信号的概念,信号,顾名思义,就是我们操作系统发送给进程的消息。举个简单的例子,我们在写C/C程序的时候,当执行a / 0类似的操作的时候,程序直接就挂…...

skynet.call使用详解

目录 skynet.call 详细解析1. 函数签名与参数2. 内部实现机制3. 会话ID与协程调度4. 超时与错误处理5. 返回值处理6. 协议类型的影响7. skynet.call vs skynet.send8. 示例代码分析9. 最佳实践10. 总结 skynet.call 详细解析 1. 函数签名与参数 函数签名: skynet…...

uniapp 打包 H5 向 打包的APP 使用 @dcloudio/uni-webview-js 传值

1.安装 dcloudio/uni-webview-js npm install dcloudio/uni-webview-js -save 这个模块的 uni. 会与H5的uniapp的 uni. 冲突,所以需要改下名称,一共需要改3处 2.引入并使用 import uniWeb from dcloudio/uni-webview-js;uniWeb.postMessage({data: {action: message,content…...

c语言 文件操作

c语言 文件操作 one 打开/usr/dev.txt文件&#xff0c;在第1行 覆盖写入 "MAC1q23456789" #include <fcntl.h> #include <unistd.h> #include <string.h> int main() { const char *line_1 "MAC1q23456789\n"; // 要写入的内容…...

企业电子招投标采购系统——功能模块功能描述+数字化采购管理 采购招投标

​功能描述 1、门户管理&#xff1a;所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含&#xff1a;招标公告、非招标公告、系统通知、政策法规。 2、立项管理&#xff1a;企业用户可对需要采购的项目进行立项申请&#xff0c;并提交审批&#xff0c;查看…...

Python 序列构成的数组(序列的增量赋值)

序列的增量赋值 增量赋值运算符 和 * 的表现取决于它们的第一个操作对象。简单起 见&#xff0c;我们把讨论集中在增量加法&#xff08;&#xff09;上&#xff0c;但是这些概念对 * 和其他 增量运算符来说都是一样的。 背后的特殊方法是 iadd &#xff08;用于“就地加法”&…...

力扣hot100【链表】

160.相交链表 题目 我的思路&#xff1a;两个链表一长一短&#xff0c;先把长的提前遍历使两个链表的长度相等&#xff0c;然后同时遍历&#xff0c;如果遍历的节点相等时说明相交&#xff0c;否则不相交。 /*** Definition for singly-linked list.* struct ListNode {* …...

PyTorch 生态迎来新成员:SGLang 高效推理引擎解析

SGLang 现已正式融入 PyTorch 生态系统&#xff01;此次集成确保了 SGLang 符合 PyTorch 的技术标准与最佳实践&#xff0c;为开发者提供了一个可靠且社区支持的框架&#xff0c;助力大规模语言模型&#xff08;LLM&#xff09;实现高效且灵活的推理。 如需深入了解 PyTorch…...

C++ Primer Plus 编程练习题 第六章 分支语句和逻辑运算符

1.大小写转换 使用cctype库里的函数进行大小写转换,但要注意使用toupper或tolower时要进行强制类型转换&#xff0c;否则会输出ASCII值 #include <iostream> #include<cctype> using namespace std;int main() {cout << "请输入字符串&#xff08;大…...

一文详解OpenGL环境搭建:Windows使用CLion配置OpenGL开发环境

在计算机图形学的广阔领域中,OpenGL作为行业标准的图形库,为开发者提供了强大的工具集来创建从简单的2D图形到复杂的3D世界。然而,对于初学者和经验丰富的开发者而言,选择一个合适的开发环境是迈向成功的第一步。尤其是在Windows平台上,配置一个既支持现代C++编程实践又能…...

一次奇怪的enq: TX - row lock contention锁问题处理

某天上午客户告知数据库库有锁导致数据库卡死&#xff0c;需排查出问题的原因&#xff0c;从根本上解决问题。 按正常步骤&#xff0c;查询V$SESSION中BLOCKING_SESSION列不为空的&#xff0c;发现没有进程互相阻塞的情况&#xff1b;而查询ACTIVE会话&#xff0c;则有大量进程…...

STL常用容器整理

STL常用容器操作整理 STL常用容器操作整理&#xff08;string/vector/set/map&#xff09;一、string&#xff08;字符串&#xff09;构造函数元素访问修改操作容量操作子串与查找 二、vector&#xff08;动态数组&#xff09;构造函数元素访问修改操作容量操作 三、set&#x…...

深入 PostgreSQL 内部:5 个关键阶段拆解查询处理全流程

引言 当您向 PostgreSQL 发送查询时&#xff0c;后端会经历多个处理阶段。每个阶段承担着不同的职责&#xff0c;以确保您能在最短时间内获得准确响应。虽然这些阶段可能庞大而复杂&#xff0c;但理解它们在查询处理中的角色对 PostgreSQL 开发者至关重要。本文将概述每个查询…...

解析 LILIkoi 光纤力传感器:FBG 原理铸就耐高温抗干扰优势

LILIkoi光纤力传感器通过光纤光栅&#xff08;FBG&#xff09;技术实现高精度力测量。其核心原理基于光纤内光栅栅距的微小变化&#xff0c;用以感知外界施加的力。该传感器在高温、强辐射等恶劣环境中表现出色&#xff0c;能够有效抵抗电磁干扰和温度漂移。凭借卓越的性能&…...

SU-YOLO:基于脉冲神经网络的高效水下目标检测模型解析

论文地址:https://arxiv.org/pdf/2503.24389 目录 一、论文概述 二、创新点解析 1. 基于脉冲的水下图像去噪(SpikeDenoiser) 原理与结构 2. 分离批归一化(SeBN) 原理与结构 3. 优化的残差块(SU-Block) 原理与结构 三、代码复现指南 环境配置 模型训练 四、…...

有关eeprom以及pwm

a0 a1就是对应的 芯片的 写和读 0写 1读 使用操作 主函数读一次 然后信息里一直写入。 用level设置挡位 如 10个格子 设置2 3 这样占空比就有了...

JMeter教程|0到1学会接口性能压测第14课-JMeter接口性能测试全流程讲解

Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件。相比Loadrunner而言,JMeter小巧轻便且免费,逐渐成为了主流的性能测试工具,是每个测试人员都必须要掌握的工具之一。 本文以百度搜索接口为例,全流程讲解JMeter接口性能测试。从JMeter下载安装到编写一个…...

系统思考:问题诊断

“做事不怕困难&#xff0c;怕的是不明白困难出在哪里。” —— 亨利福特 最近发现&#xff0c;有些领导者或者团队&#xff0c;常常急于给出解决方案&#xff0c;却忽视了最关键的一步——诊断问题的根源。团队甚至在集体心智模式的影响下&#xff0c;连问题本身都搞错了方向…...

有效压缩 Hyper-v linux Centos 的虚拟磁盘 VHDX

参考&#xff1a; http://www.360doc.com/content/22/0505/16/67252277_1029878535.shtml VHDX 有个不好的问题就是&#xff0c;如果在里面存放过文件再删除&#xff0c;那么已经使用过的空间不会压缩&#xff0c;导致空间一直被占用。那么就需要想办法压缩空间。 还有一点&a…...

使用 redis 实现消息队列

方案1: 使用list做消息队列问题1: 如何保证消息不丢失问题 2: 重复消费/幂等 方案 2: zset实现消息队列方案 3: 发布/订阅(pub/sub)问题1: 如何保证消息不丢失问题 2: 重复消费/幂等 方案 4: Stream 实现消息队列问题1: 如何保证消息不丢失问题 2: 重复消费/幂等 方案1: 使用li…...

2025 XYCTF Pwn-wp(含附件)

前言 总体来说Pwn方向题目难度属于中等,属于那种一眼看不出要咋做,但多试试又能做出来的那种,比赛的时候甚至有几只队伍AK了Pwn方向。感觉题目还是很不错的尽管比赛中有一些小意外像是有些题目附件给错了&#xff0c;但是XYCTF的师傅们都是无偿出题纯热爱向大伙分享自己的题目…...

verilog有符号数的乘法

1、单周期乘法器 对于低速要求的乘法器&#xff0c;可以简单的使用 * 实现。 module Mult(input wire [7:0] multiplicand ,input wire [7:0] multipliter ,output wire [7:0] product);assign product multiplicand * multipliter …...

【python3】关于等额本金和等额本息计算

【python3】关于等额本金和等额本息计算 1.背景2.计算3.总结4.推导 1.背景 在贷款买房的宝子们一定有了解等额本金和等额本息&#xff0c;年轻的时候只听销售在那里计算&#xff0c; 您可能听得云里雾里。 等额本金&#xff1a;每个月还的本金固定&#xff0c;利息逐渐减少。…...

git怎么删除远程分支

删除远程分支 引言删除远程分支查看远程分支查看远程分支详情删除远程分支 引言 本文旨在记录一下&#xff0c;git如何通过命令行删除远程分支。 删除远程分支 查看远程分支 使用指令&#xff1a; git branch -r查看远程分支详情 使用指令&#xff1a; git remote show …...

【C++】函数直接返回bool值和返回bool变量差异

函数直接返回bool值和返回bool变量差异 背景 在工作中遇到一个比较诡异的问题&#xff0c;场景是给业务方提供的SDK有一个获取状态的函数GetStatus&#xff0c;函数的返回值类型是bool&#xff0c;在测试过程中发现&#xff0c;SDK返回的是false&#xff0c;但是业务方拿到的…...

蓝桥杯-蓝桥幼儿园(并查集)

并查集的核心思想 并查集主要由两个操作构成&#xff1a; Find&#xff1a;查找某个元素所在集合的根节点。并查集的特点是&#xff0c;每个元素都指向它自己的父节点&#xff0c;根节点的父节点指向它自己。查找过程中可以通过路径压缩来加速后续的查找操作&#xff0c;即将路…...

Ensemble of differential evolution variants(EDEV)

差分进化变体的集成1 在这项研究中&#xff0c;一个基于多种群的框架&#xff08;MPF&#xff09;被提议用于多个差分进化变体的集合。与PAP2不同&#xff0c;PAP通过时间预算分配策略和个体移民算子实现算法组合&#xff0c;MPF将整个种群划分为子种群&#xff0c;包括几个指…...

《AI开发工具和技能实战》第1集 Windows CMD 命令行操作指南:从基础到进阶

第1集 Windows CMD 命令行操作指南&#xff1a;从基础到进阶 在日常使用 Windows 系统时&#xff0c;命令提示符&#xff08;Command Prompt&#xff0c;简称 CMD&#xff09;是一个强大且灵活的工具。无论是文件管理、系统配置&#xff0c;还是网络诊断&#xff0c;CMD 都能提…...

实现一个拖拽排序组件:Vue 3 + TypeScript + Tailwind CSS

文章目录 一、项目背景与需求分析需求&#xff1a; 二、搭建基础项目1. 初始化 Vue 3 项目2. 安装 Tailwind CSS 三、设计拖拽排序组件1. 创建拖拽排序组件2. 说明&#xff1a; 四、完善样式与功能1. 样式调整2. 拖拽顺序更新 五、进一步优化与拓展1. 添加排序指示器2. 支持动态…...

哈希表(开散列)的实现

目录 引入 开散列的底层实现 哈希表的定义 哈希表的扩容 哈希表的插入 哈希表查找 哈希表的删除 引入 接上一篇&#xff0c;我们使用了闭散列的方法解决了哈希冲突&#xff0c;此篇文章将会使用开散列的方式解决哈希冲突&#xff0c;后面对unordered_set和unordered_map的…...

解决 Jetpack Compose 中 State 委托报错:“no method getValue“ 的终极指南

1. 必须的导入 ✅ import androidx.compose.runtime.getValue // 核心关键&#xff01;作用&#xff1a;为 State 类型添加 getValue() 操作符&#xff0c;使其支持 by 委托语法。为什么需要&#xff1a;Kotlin 的委托属性需要对象实现 getValue() 方法&#xff0c;Compose 通…...

我们如何思考AI创业投资

&#x1f3ac; Verdure陌矣&#xff1a;个人主页 &#x1f389; 个人专栏: 《C/C》 | 《转载or娱乐》 &#x1f33e; 种完麦子往南走&#xff0c; 感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持&#xff01;❤️ 声明&#xff1a;本文作者转载&#xff0c;原文出自…...

1.ElasticSearch-入门基础操作

一、介绍 The Elastic Stack 包含ElasticSearch、Kibana、Beats、LogStash 这就是所说的ELK 能够安全可靠地获取任何来源、任何格式的数据&#xff0c;然后实时地对数据进行搜索、分析和可视化。Elaticsearch,简称为ES&#xff0c;ES是一个开源的高扩展的分布式全文搜索引擎,是…...

2.ElasticSearch-Java API

一、基础使用 1.1 Maven 坐标 <dependencies><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.8.0</version></dependency><!--es的客户端--><dependenc…...

蓝桥杯-小明的彩灯(差分)

问题描述&#xff1a; 差分数组 1. 什么是差分数组&#xff1f; 差分数组 c 是原数组 a 的“差值表示”&#xff0c;其定义如下&#xff1a; c[0] a[0]c[i] a[i] - a[i-1] &#xff08;i ≥ 1&#xff09; 差分数组记录了相邻元素的差值。例如&#xff0c;原数组 a [1, …...

vim定位有问题的脚本/插件的一般方法

在使用vim的过程中可能会遇到一些报错或其他不符合预期的情况&#xff0c;本文介绍一些我自己常用的定位有问题脚本/插件的方法&#xff08;以下方法同样适用于neovim&#xff09; 执行了某些命令的情况 这种情况最简单&#xff0c;使用:h 命令&#xff0c;如果插件有文档的话…...

EasyExcel实现图片导出功能(记录)

背景&#xff1a;在旧系统的基础上&#xff0c;导出一些工单信息时&#xff0c;现需要新添加处理人的签名或者签章&#xff0c;这就涉及图片的上传、下载、写入等几个操作。 1、EasyExcel工具类 &#xff08;1&#xff09;支持下拉框的导出。 import com.alibaba.excel.Easy…...

PCL拟合空间3D圆周 fit3DCircle

PCL版本 1.15.0 main.cpp #include<vector> #include<iostream> #include <array> #include <string> #include <windows.h> #include <omp.h> #include <charconv> // C17 #include <cstdlib> #include<chrono> #in…...

ansible 实现达梦7数据库初始化数据脚本写入

关于使用ansible 对ARM版达梦7的k8s自动化部署参考我的这篇操作 ansible-playbook 写arm版达梦7数据库的一键安装脚本-CSDN博客文章浏览阅读303次&#xff0c;点赞5次&#xff0c;收藏3次。达梦官方提供镜像目前是dm8_x86 版本&#xff0c;因为众所周知的国产化方面的需求&…...

leetcode每日刷题

Day18 Title45.jump(跳跃游戏 II) 解法一&#xff1a;动态规划 依然分三步走&#xff1a; 1.状态方程 2.dp[i]的意义 3.边界条件及初始值 优先思考第二个问题&#xff1a; dp[i]表示到达i时需要的最少跳数 第一个问题&#xff1a; dp[ij]min(dp[i]1,dp[ij]) 为什么&am…...