sql mail 发邮件的问题

darwinye 2004-07-02 02:47:10
我用在一台2003server 的机器上以outlook2003作邮件客户端配sql mail的功能

使用
exec master.dbo.xp_sendmail 'yec@ict.ac.cn' 'nihao'
exec master.dbo.xp_readmail
命令
成功的发出邮件,可是发现邮件在自己的收件箱里面(还注明了邮件未发出),
那位大侠给指点一下原因阿!

...全文
200 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2005-02-19
  • 打赏
  • 举报
回复
也许是配置问题吧,参考下面这个进行配置(我测试过是可以的)

怎样配置SQL Server发送电子邮件

朱二(2004.9 转载请注明作者)


通常大家都知道:SQL Server与Microsoft Exchange Server集成性很好,关于这方面的配置,在SQL Server的联机帮助里有详细的说明,在此不再赘述。然而我们更关心的问题是:在没有Exchange Server的情况下,如何配置SQL Server利用Internet 邮件服务器发送邮件?
笔者曾为这问题伤透了脑筋,搜遍了互联网上的相关资料,发现仅有的几篇资料中有的是一笔带过,有的虽然介绍了操作步骤,可按照步骤一步一步操作下来,结果总是失败。为此笔者反复实验,终于找到一种简单有效的方法,不敢独自享受,下面是详细的配置步骤,如果您在操作的过程中碰到什么问题,请留言。

测试环境:

1 Windows 2000 Server
2 SQL Server 2000+SP3
3 Microsoft Outlook (Office 2000)

准备一个Internet邮件帐户:
测试电子邮件帐户:test@163.com
Smtp服务器 smtp.163.com
pop3服务器 pop.163.com

步骤一: 更改电子邮件配置

1 打开Microsoft Outlook 单击“工具”菜单中的“选项”,然后单击“邮件服务”选项卡。
2 单击“重新配置邮件支持”。
3 选择“用于企业或工作组”选项
4 重新启动Microsoft Outlook

步骤二: 添加配置文件

1 单击“工具”菜单中的“服务”,然后单击“添加”按钮。
2 选择"Internet 电子邮件",单击“确定”。
3 下面的步骤是设置电子邮件帐号,请参考Microsoft Outlook帮助文件,这里不再赘述。
4 利用配置好的电子邮件帐号收发邮件,确认配置成功。

步骤三: 配置MSSQLSERVER服务采用邮件配置文件

1 重新启动MSSQLSERVER服务(必须的,否则MSSQLSERVER服务检测不到上一步骤添加的配置文件)
2 打开企业管理器->展开服务器->支持服务->右击"邮件"->点击下拉框,你会发现
"Microsoft Outlook Internet Settings"选项,点击"测试".如果弹出表示成功的对话框,那恭喜你,已经 大功告成了.

步骤四:享受你的劳动成果

1 打开SQL Server的查询分析器

2 输入下列SQL语句,执行
exec master..xp_sendmail 'test@163.com','Hello,World!'

3 好了,去你的邮箱收邮件去吧!

hai2003xp 2005-02-18
  • 打赏
  • 举报
回复
太歷害了吧!!!
lengxiaowei 2005-02-18
  • 打赏
  • 举报
回复
三、发送邮件

xp_sendmail {[@recipients =] 'recipients [;...n]'}
[,[@message =] 'message']
[,[@query =] 'query']
[,[@attachments =] attachments]
[,[@copy_recipients =] 'copy_recipients [;...n]'
[,[@blind_copy_recipients =] 'blind_copy_recipients [;...n]'
[,[@subject =] 'subject']
[,[@type =] 'type']
[,[@attach_results =] 'attach_value']
[,[@no_output =] 'output_value']
[,[@no_header =] 'header_value']
[,[@width =] width]
[,[@separator =] 'separator']
[,[@echo_error =] 'echo_value']
[,[@set_user =] 'user']
[,[@dbuse =] 'database']

其中@recipients是必需的

参数说明:

参数 说明
@recipients 收件人,中间用逗号分开
@message 要发送的信息
@query 确定执行并依附邮件的有效查询,除触发器中的插入表及删除表外,此查询能引用任何对象
@attachments 附件
@copy_recipients 抄送
@blind_copy_recipients 密送
@subject 标题
@attach_results 指定查询结果做为附件发送
@no_header 不发送查询结果的列名
@set_user 查询联接的用户名,默认为Guset
@dbuse 查询所用的数据库,默认为缺省数据库

四、阅读邮件收件箱中的邮件

xp_readmail [[@msg_id =] 'message_number'] [, [@type =] 'type' [OUTPUT]]
[,[@peek =] 'peek']
[,[@suppress_attach =] 'suppress_attach']
[,[@originator =] 'sender' OUTPUT]
[,[@subject =] 'subject' OUTPUT]
[,[@message =] 'message' OUTPUT]
[,[@recipients =] 'recipients [;...n]' OUTPUT]
[,[@cc_list =] 'copy_recipients [;...n]' OUTPUT]
[,[@bcc_list =] 'blind_copy_recipients [;...n]' OUTPUT]
[,[@date_received =] 'date' OUTPUT]
[,[@unread =] 'unread_value' OUTPUT]
[,[@attachments =] 'attachments [;...n]' OUTPUT])
[,[@skip_bytes =] bytes_to_skip OUTPUT]
[,[@msg_length =] length_in_bytes OUTPUT]
[,[@originator_address =] 'sender_address' OUTPUT]]

参数说明:

参数 说明
@originator 发件人
@subject 主题
@message 信息
@recipients 收件人
@skip_tytes 读取邮件信息时跳过的字节数,用于顺序获取邮件信息段。
@msg_length 确定所有信息的长度,通常与@skip_bytes一起处理长信息

五、顺序处理下一个邮件

xp_findnextmsg [[@msg_id =] 'message_number' [OUTPUT]]
[,[@type =] type]
[,[@unread_only =] 'unread_value'])

六、删除邮件

xp_deletemail {'message_number'}

如果不指定邮件编号则删除收件箱中的所有邮件

七、自动处理邮件

sp_processmail [[@subject =] 'subject']
[,[@filetype =] 'filetype']
[,[@separator =] 'separator']
[,[@set_user =] 'user']
[,[@dbuse =] 'dbname']

--------------------------------
declare
@mail varchar(30),
@msql varchar(1000),
@memo varchar(300),
@msubject varchar(30)

set @mail='ygq@ebtsz.com'
select @msql='shsalediscount' //执行存储过程

select @memo='以下是每天得销售损失情况'+convert(char(10),getdate(),102)
select @msubject='每天得销售损失'

exec @mstatus=master..xp_sendmail @recipients=@mail,
@message=@memo,
@subject=@msubject,
@width=800,
@query=@msql
----------------------------------------------------
但是首先需要局域网内有Exchange Server,虽然sqlserver上的帮助说:只要有一个遵从扩展 MAPI 的邮件服务器就行,但是我也不知道除了Exchange Server,还有什么服务器支持MAPI,这纯粹是微软的东西!!先给你介绍一下Exchange Server的设置方式,其他的邮件服务器是否能设置,怎么设置还是等高人来吧!

1。使用 MSSQLServer 服务会用到的用户帐户登录到 Microsoft Windows NT® 4.0 或 Windows® 2000 上。该用户帐户必须是本地计算机的管理员和域帐户。
2。确认 Exchange Server 客户端 (Exchnge32.exe) 或 Microsoft Outlook™ 客户端 (Outlook.exe) 能够连接到 Exchange Server 而且能够发送电子邮件。如果使用 Outlook,确保 Outlook 安装时选择了"用于企业或工作组"选项。
3。确认所用的 Exchange Server 配置文件中没有个人消息存储 (.pst)。Exchange Server 配置文件的名字不应超过 32 个字符。
4。在"服务"选项卡上,确认 Microsoft Exchange Server 和个人通讯簿是唯一可用的服务,然后单击"发送"选项卡
lengxiaowei 2005-02-18
  • 打赏
  • 举报
回复
如何为sql server中sql mail 设置邮箱
1.使用 MSSQLServer 服务会用到的用户帐户登录到 Microsoft Windows NT® 4.0 或 Windows® 2000 上。该用户帐户必须是本地计算机的管理员和域帐户。
2.确认 Exchange Server 客户端 (Exchnge32.exe) 或 Microsoft Outlook™ 客户端 (Outlook.exe) 能够连接到 Exchange Server 而且能够发送电子邮件。如果使用 Outlook,确保 Outlook 安装时选择了 "用于企业或工作组 "选项。
3.确认所用的 Exchange Server 配置文件中没有个人消息存储 (.pst)。Exchange Server 配置文件的名字不应超过 32 个字符。
4.在 "服务 "选项卡上,确认 Microsoft Exchange Server 和个人通讯簿是唯一可用的服务,然后单击 "发送 "选项卡。确认 "发送到 "框中选定的内容是 Exchange Server 中的邮箱,它应该有一个类似于 "邮箱 - <友好的用户名 > "的名字(其中 <友好的用户名 >是在第一步中登录到 Windows NT 4.0 或 Windows 2000 的用户名)。
5.要运行带有 Exchange Server 的 "SQL 邮件 ",MSSQLServer 服务必须在第一步中登录的同一个用户帐户下运行。在 "控制面板 "中,双击 "服务 ",选择 MSSQLServer 服务,然后单击 "启动 "。
6.确认 "SQL 邮件 "的配置文件是否正确。在 SQL Server 企业管理器中,展开服务器,展开 "支持服务 "文件夹,选择 "SQL 邮件 ",然后用右键单击。单击 "属性 ",然后在 "常规 "选项卡上,确保 "配置文件名 "框中指定的配置文件名正确。(事件探查器名必须与第三步中用到的配置文件名匹配。)单击 "测试 ",验证配置文件设置正确。
7.如果 "SQL 邮件 "无法启动(例如,显示错误信息指出配置文件不正确),请检查设置确保未将 Outlook Express 设置为默认的电子邮件客户程序。在 "控制面板 "中双击 "Internet "选项。在 "程序 "选项卡中,验证 Outlook Express 不在电子邮件组合框中。如果不得不将默认的电子邮件客户程序更改为 Outlook Express 以外的客户程序,那么,可能需要先验证 "SQL 邮件 "能够用邮件配置文件启动,然后再停止并重新启动 MSSQLServer 服务。
在有些情况下,邮件的配置文件可能会损坏而且 "SQL 邮件 "将无法使用它。要更正这个问题,需要把配置文件复制到另一个文件名下,或重新创建配置文件。
8.如果用来启动 Microsoft SQL Server™ 的帐户没有权限访问 Exchange 服务器,那么就无法使用 "SQL 邮件 "。执行 xp_cmdshell 来测试 SQL Server 对 Exchange Server 的访问权限,它执行与 "SQL 邮件 "相同的权限。使用下面的命令测试对服务器的连接,假定 Exchange Server 位于名为 "MyServer "的计算机上。

xp_cmdshell "NET USE \\MyServer\IPC$ "

如果这个命令无法正常执行,说明第三步未正确完成。

---------------------------------------------------------------

可以实现。
1.将SQL Server与SQL SERVER AGENT服务的启动账户设置为当前Win2000的用户,如用户administrator在Test机器上,则用户名设置为Test\administrator;
2.安装outlook2000以上版本,设置为“用于企业或工作组的”邮件支持,设置e-mail帐号,其中e-mail帐号密码需保存在本机;
3.配置支持服务的SQL邮件及SQL Server Agent的邮件配置(在前2步操作后可能要重启计算机才能看到配置文件名);

---------------------------------------------------------------

配置邮件服务器的关键是SQLServer要用windows账号登录
这个应该会吧
然后在SQL邮件中的属性中选择一个配置文件就可以了
如还有问题,找我好了
---------------------------------------------------------------

1、SQL Server邮件配置:SQL Server企业管理器->你的服务器组->服务器->支持服务->SQL邮件,单击右键属性,在出现的对话框中选择邮件配置文件名,测试就OK;
2、SQL Server Agent邮件配置:SQL Server企业管理器->你的服务器组->服务器->管理->SQL代理,在邮件配置文件中输入邮件配置文件名,这个过程应用时会提示将自动重启SQL Server代理服务
---------------------------------------------------------------

使用SQL Mail收发和自动处理邮件
SQL SERVER提供了通过EXCHANGE或OUTLOOK收发邮件的扩展存储过程,下面将这几个过程简单的介绍一下。

一、启动SQL Mail

xp_startmail @user,@password

@user和@password都是可选的

也可打开Enterprise Manager中的Support Services,在SQL Mail上单击右键打开右键菜单,然后按Start来启动

二、停止SQL Mail

xp_stopmail

也可用上述方法中的菜单里的Stop来停止
tuwicn 2005-02-18
  • 打赏
  • 举报
回复
up,我也有这个问题
txhack 2004-07-29
  • 打赏
  • 举报
回复
用什么语言实现的,我也想学学
darwinye 2004-07-02
  • 打赏
  • 举报
回复
和我的有什么不同么?
我试了一下 用了exec master.dbo.xp_readmail后邮件还是在自己的收件箱里面
jackting 2004-07-02
  • 打赏
  • 举报
回复
exec master..xp_sendMail 'yec@ict.ac.cn' , 'nihao'

11,849

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 非技术版
社区管理员
  • 非技术版社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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