我目前正在对应用程序进行一些高级规划。bcp 导入完成后,我将使用数据库邮件发送电子邮件。
我希望电子邮件为收件人提供选项或过滤器。他们的选择将决定启动哪些特定的 SQL 脚本。
例如:
来自:database@mail.com
至:henry@mail.com
导入已完成,您想:
Run Code Online (Sandbox Code Playgroud)+------------+---------+ | Update | Find | +------------+---------+
我的直觉是我可以选择 mailto 链接,以填充回复电子邮件的正文。但是我一直无法找到有关在收到电子邮件时触发警报的任何资源。事实上,我在下面找到的图表告诉我,您实际上无法回复数据库邮件:
有没有人做过这样的项目?
在 SQL Server 中,我们可以设置多个电子邮件配置,其中只有一些设置为默认值。
我尝试使用以下查询来获取帐户列表:
select *
from msdb.dbo.sysmail_profile p
join msdb.dbo.sysmail_profileaccount pa on p.profile_id = pa.profile_id
join msdb.dbo.sysmail_account a on pa.account_id = a.account_id
join msdb.dbo.sysmail_server s on a.account_id = s.account_id
Run Code Online (Sandbox Code Playgroud)
有什么方法可以识别默认邮件配置文件吗?
到目前为止,我已经花了大约 30 个小时努力sp_send_dbmail去上班。我终于得到了一些工作,但我严重怀疑它的安全性。我想知道一种更好但快速且易于设置的方法(此时我的时间受到严重限制),以及“理想”(最佳实践)解决方案。
当前 SQL Server 2005 配置
- `After Insert` Trigger on table executes `sp_send_dbmail`
- Database Mail SMTP Account setup (with successful mail test)
- Database Mail Profile setup (with "Public Profile" ticked)
- "guest" account added to "DatabaseMailUserRole"
Run Code Online (Sandbox Code Playgroud)
我发现这篇文章提出了“正确”的解决方案,我阅读了这篇文章,在那里我发现这是一个非常复杂的解决方案,似乎有太多可能出错的事情,更不用说难以维护了。
我对替代解决方案的想法是这些。
1. Setup an Application Role in msdb (this would be my first time using one
and not even sure if it IS a solution :P), and use it to ensure that …Run Code Online (Sandbox Code Playgroud) 我有一个需要通过 Oracle 触发器发送电子邮件的应用程序。我知道在 Oracle 11g 中,您必须有一个 ACL 文件才能授予某些模式访问网络的权限。我的计划是为每个需要访问网络的用户创建一个单独的 ACL 文件,然后使用以下查询检查它是否已正确创建:
SELECT * FROM DBA_NETWORK_ACLS;
Run Code Online (Sandbox Code Playgroud)
但是,似乎此查询只返回了一条记录 - 始终是创建的最新 ACL。这是否意味着您只能拥有一个 ACL?如果是这样,大概这意味着在客户端的服务器上安装这个应用程序时,我必须只向他们现有的 ACL 添加权限,而不是尝试创建一个新的?
谢谢!
这些是我正在使用的命令:
--create ACL for USER1
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(ACL => 'testacl1.xml',
DESCRIPTION => 'ACL',
PRINCIPAL => 'USER1',
IS_GRANT => TRUE,
PRIVILEGE => 'connect');
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(ACL => 'testacl1.xml',
PRINCIPAL => 'USER1',
IS_GRANT => TRUE,
PRIVILEGE => 'resolve');
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(ACL => 'testacl1.xml', host => '*');
--create ACL for USER2
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(ACL => 'testacl2.xml',
DESCRIPTION => 'ACL',
PRINCIPAL => 'USER2',
IS_GRANT => TRUE,
PRIVILEGE => 'connect'); …Run Code Online (Sandbox Code Playgroud) 我有一份工作向一组用户发送不相关的电子邮件。
电子邮件的标题是Staging -> [AUPAIR] arrivalDate trigger issue。
当我使用上面的标题查询 msdb 数据库中的作业表时,我没有得到答案:
USE [msdb]
GO
SELECT j.job_id,
s.srvname,
j.name,
js.step_id,
js.command,
j.enabled
FROM dbo.sysjobs j
JOIN dbo.sysjobsteps js
ON js.job_id = j.job_id
JOIN master.dbo.sysservers s
ON s.srvid = j.originating_server_id
WHERE js.command LIKE N'%Staging -> [AUPAIR] arrivalDate trigger issue%'
Run Code Online (Sandbox Code Playgroud)
只有当我改变我的查询如下时,我才能找到强盗工作:
USE [msdb]
GO
SELECT j.job_id,
s.srvname,
j.name,
js.step_id,
js.command,
j.enabled
FROM dbo.sysjobs j
JOIN dbo.sysjobsteps js
ON js.job_id = j.job_id
JOIN master.dbo.sysservers s
ON s.srvid = j.originating_server_id
--WHERE js.command LIKE N'Staging …Run Code Online (Sandbox Code Playgroud) sql-server database-mail jobs sql-server-2016 string-searching
如何使用 SQL Server 数据库邮件发送 Unicode 符号?我的目标是发送关于电子邮件主题的符号。比方说,我想发送关于该主题的“带有符号的主题”。我想使用的符号来自 Segoe UI Emoji 字体。
谢谢!
我需要在我的项目中使用 SQL Server 数据库邮件功能。但是数据库邮件在我的开发实例上似乎不可用。
对象资源管理器中应该有一个“数据库邮件”节点。在此屏幕截图中,我似乎找不到任何内容。还显示了我的 SQL Server 版本。
此 SQL Server 版本不支持数据库邮件吗?使用数据库邮件需要哪个 SQL Server 版本(或版本)?
我可以在网上找到的所有文档总是假设该功能已经安装,然后继续解释如何配置它。如果我的 SQL Server 版本支持数据库邮件,如何安装/启用该功能?
我启用Database Mail XPs并在我的开发机器上测试它。我只是想知道这是否DB Mail是一个糟糕的安全选择,以及通过应用程序服务器(ColdFusion 或 PHP)发送这种消息是否更安全(或标准做法)?我将使用Database Mail数据库备份/恢复消息、错误或错误检查消息(我能想到的)。我知道启用功能总是会增加风险。
使用:
提前致谢。
我在每晚触发的 SQL 代理作业中使用 sp_send_dbmail。该作业查询我们的数据库并检查产品价格更新,如果有,它将通过电子邮件作为附件发送给我们的电子商务供应商。他们有一些自动流程,他们会更新我们的电子商务平台,但是他们的自动流程无法处理 sp_send_dbmail 提供的文件。sp_send_dbmail 似乎在结果集中的所有字符之间放置了空字符。
查看在十六进制编辑器中打开 csv 的结果:
通过文本编辑器查看我看到的预期:
sp_send_dbmail 在这里查询:
SET @FileName = 'Update_' + CONVERT(VARCHAR(12),GETDATE),105) '.csv'
SET @Query = 'Some Query'
EXEC msdb.dbo.sp_send_dbmail
@recipients = 'me@domain.com'
@query = @Query
@attach_query_result_as_file = 1
@query_attachment_filename = @FileName
@query_result_separator = ','
@query_result_no_padding = 1
END
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
****编辑补充说明****
使用 Microsoft SQL Server 2008 R2 排序规则为 Latin1_General_CI_AS
离开 no_padding 会在每个返回的字段中留下几个尾随空格。每个空格 (20) 由空值 (00) 分隔
我通过 SQL Server 电子邮件发送 6 个 .csv 文件作为附件。但是电子邮件失败并在数据库邮件日志中显示以下消息:
异常消息:无法向邮件服务器发送邮件。(服务不可用,关闭传输通道。服务器响应为:数据长度超过 52.4MiB 限制)
然后我运行以下命令将 maxfilesize 限制增加 2 GB
EXECUTE msdb.dbo.sysmail_configure_sp
'MaxFileSize', '2147483647';
Run Code Online (Sandbox Code Playgroud)
文件大小限制已成功更改为 2 GB,但我仍然收到相同的错误消息。
以下是我的文件大小(以 KB 为单位)
文件 A 213 KB,文件 B 265 KB,文件 C 6246 KB,文件 D 35 KB,文件 E 60 KB,文件 F 31371 KB
我正在使用 mail-gun(smtp) 发送电子邮件。电子邮件在没有 FILE F 的情况下成功运行。但是当我附加 FILE F 时,电子邮件失败。当我将最大文件大小增加到 2 GB 时,为什么我的电子邮件失败。任何的想法?
如何在 SQL Server 中使用数据库邮件?我在论坛上关注了很多文章,但我失败了很多错误。我在一本书中读到,我必须先安装 SMTP 服务器和 Microsoft Exchange,然后才能使用数据库邮件?这样对吗?
database-mail ×11
sql-server ×9
security ×2
unicode ×2
encoding ×1
jobs ×1
oracle ×1
t-sql ×1
trigger ×1