msdb..sp_send_dbmail 发邮件发不出去是怎么回事

金大哈 2009-07-02 03:34:44
sql 如下:



exec msdb..sp_send_dbmail @profile_name = 'dbo_profile' -- profile 名称
,@recipients = 'testqq@qq.com' -- 收件人邮箱
,@subject = '邮件标题 ' -- 邮件标题
,@body = 'sssssssssssssssss' -- 邮件内容
,@body_format = 'TEXT' -- 邮件格式



以前是可以的
现在不知道是不是SQL SERVER那个设置改变了 就是不行

运行语句后 提示“邮件已排队”
但是邮箱收不到此邮件

麻烦给位大侠帮忙瞅瞅
...全文
406 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
peterzhou2000 2010-04-22
  • 打赏
  • 举报
回复
装的是SQL Express吧
Service Broker未启用
gonguui1982 2010-03-08
  • 打赏
  • 举报
回复
我和你情况一样哎!!
wqqcom 2009-09-27
  • 打赏
  • 举报
回复
我验证过了 好像不行 症状一样 都是未发送 请告诉帮忙
金大哈 2009-07-03
  • 打赏
  • 举报
回复
好的谢谢各位 我来验证一下
不懂之处再行请教
Novelty 2009-07-03
  • 打赏
  • 举报
回复
查一下
select * from sysmail_sentitems
看里面有没有。如果有就说明邮件已经发出去,检查是不是你的邮件服务器被列为了垃圾邮件服务器。

另外sysmail_faileditems是失败的邮件,sysmail_unsentitems是还未发送的邮件。
Zoezs 2009-07-03
  • 打赏
  • 举报
回复

1. 启用 SQL Server 2005 邮件功能。

use master
go

exec sp_configure 'show advanced options',1
go

reconfigure
go

exec sp_configure 'Database mail XPs',1
go

reconfigure
go

2. 在 SQL Server 2005 中添加邮件帐户(account)

exec msdb..sysmail_add_account_sp
@account_name = 'p.c.w.l' -- 邮件帐户名称(SQL Server 使用)
,@email_address = 'webmaster@sqlstudy.com' -- 发件人邮件地址
,@display_name = null -- 发件人姓名
,@replyto_address = null
,@description = null
,@mailserver_name = '58.215.64.159' -- 邮件服务器地址
,@mailserver_type = 'SMTP' -- 邮件协议(SQL 2005 只支持 SMTP)
,@port = 25 -- 邮件服务器端口
,@username = 'webmaster@sqlstudy.com' -- 用户名
,@password = 'xxxxxxxxx' -- 密码
,@use_default_credentials = 0
,@enable_ssl = 0
,@account_id = null

3. 在 SQL Server 2005 中添加 profile

exec msdb..sysmail_add_profile_sp @profile_name = 'dba_profile' -- profile 名称
,@description = 'dba mail profile' -- profile 描述
,@profile_id = null

4. 在 SQL Server 2005 中映射 account 和 profile

exec msdb..sysmail_add_profileaccount_sp @profile_name = 'dba_profile' -- profile 名称
,@account_name = 'p.c.w.l' -- account 名称
,@sequence_number = 1 -- account 在 profile 中顺序

5. 利用 SQL Server 2005 Database Mail 功能发送邮件。

exec msdb..sp_send_dbmail @profile_name = 'dba_profile' -- profile 名称
,@recipients = 'sqlstudy@163.com' -- 收件人邮箱
,@subject = 'SQL Server 2005 Mail Test' -- 邮件标题
,@body = 'Hello Mail!' -- 邮件内容
,@body_format = 'TEXT' -- 邮件格式

6. 查看邮件发送情况:

use msdb
go

select * from sysmail_allitems
select * from sysmail_mailitems
select * from sysmail_event_log

如果不是以 sa 帐户发送邮件,则可能会出现错误:

Msg 229, Level 14, State 5, Procedure sp_send_dbmail, Line 1
EXECUTE permission denied on object 'sp_send_dbmail', database 'msdb', schema 'dbo'.

这是因为,当前 SQL Server 登陆帐户(login),在 msdb 数据库中没有发送数据库邮件的权限,需要加入 msdb 数据库用户,并通过加入 sp_addrolemember 角色赋予权限。假设该SQL Server 登陆帐户名字为 “dba”

use msdb
go

create user dba for login dba
go

exec dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole',
@membername = 'dba'
go

此时,再次发送数据库邮件,仍可能有错误:

Msg 14607, Level 16, State 1, Procedure sp_send_dbmail, Line 119
profile name is not valid

虽然,数据库用户 “dba” 已经在 msdb 中拥有发送邮件的权限了,但这还不够,他还需要有使用 profile:“dba_profile” 的权限。

use msdb
go

exec sysmail_add_principalprofile_sp @principal_name = 'dba'
,@profile_name = 'dba_profile'
,@is_default = 1

从上面的参数 @is_default=1 可以看出,一个数据库用户可以在多个 mail profile 拥有发送权限。

Zoezs 2009-07-03
  • 打赏
  • 举报
回复
你邮件帐户配置了吗?
netcup 2009-07-03
  • 打赏
  • 举报
回复
发送不出去,先试下用OUTLOOK等发信可以不,再看看SMTP服务器设置的参数对不对。SQL2005以后的数据库邮件设置都很简单了。
金大哈 2009-07-03
  • 打赏
  • 举报
回复
这个问题貌似网上也不少 为什么有的人就行呢

我的OUTLOOK 也是好的撒
伴老思源 2009-07-03
  • 打赏
  • 举报
回复
~
jiangshun 2009-07-02
  • 打赏
  • 举报
回复
帮顶,关注

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧