`
isiqi
  • 浏览: 16035614 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

NET环境下几种不同的邮件发送解决方案

阅读更多

1、使用outLook提供的发送
如:我见过的用友软件U8生产制造(演示版),其中的邮件功能就是通过调用outLook的ActiveX 组件
优点:开发简单
缺点:依赖outlook组件,SMTP 邮件服务

邮件发送的代码如下:
Private Sub Send()
Dim outObj As New Outlook.Application()
Dim Item As Outlook.MailItemClass
Item = outObj.CreateItem(0)
Item.To = "lihonggen0@163.com "
Item.Subject = "hello"
Item.Body = "hell"
Item.Attachments.Add("C:\abc.txt")
Item.Send()
End Sub
参考:使用 Microsoft Outlook 2002 开发解决方案http://www.microsoft.com/china/msdn/library/dndotnetout2k2/html/odc_oldevsol.asp
2、WEB开发,在ASP.NET中引用System.Web.Mail类
System.Web.Mail 命名空间包含使您可以使用 CDOSYS(Windows 2000 的协作数据对象)消息组件来构造和发送消息的类。邮件消息是通过内置在 Microsoft Windows 2000 中的 SMTP 邮件服务或任意的 SMTP 服务器来传送的。此命名空间中的类可以在 ASP.NET 或任何托管应用程序
MailAttachment提供用于构造电子邮件附件的属性和方法。
MailMessage提供用于构造电子邮件的属性和方法。
SmtpMail提供用于使用 Windows 2000 的协作数据对象 (CDOSYS) 消息组件来发送消息的属性和方法。
邮件可以通过 Microsoft Windows 2000 中内置的 SMTP 邮件服务或任意 SMTP 服务器来传送。System.Web.Mail 命名空间中的类型可以在 ASP.NET 或任何托管应用程序使用。
Smtp服务器的设置,现在一些免费邮件提供商是不再提供针对所有邮件提供Smtp服务,在发送邮件的时候,需要验证用户信息,考虑Smtp用户验证问题
如果Smtp服务器在本地计算机,发送速度很快的,基本上不用担心,如果不是本地服务器,那么发送的时候最好不要以此太多,一是速度问题,二是以此发送太多邮件,Smtp服务器可能认为是垃圾邮件而拒绝服务
代码如下:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim mailObj As New MailMessage()
Dim smtp As SmtpMail
'定义SMTP服务器的名称
smtp.SmtpServer = "smtp.XXX.com"
'定义邮件的发送地址
mailObj.From = "lihonggen@XXX.com"
'定义邮件的接收地址
mailObj.To = " AAA@XXX.com"
'定义邮件的暗送地址
mailObj.Bcc= "aa@sina.com"
'定义邮件的抄送地址
mailObj.Cc = "aaa@sina.com"
'定义邮件的主题
mailObj.Subject = "主题"
'定义邮件的主体
mailObj.Body = "邮件主体!"
'邮件以 HTML的格式发送
mailObj.BodyFormat = MailFormat.Html
'定义邮件的有限级,在此设定为高
mailObj.Priority = MailPriority.High
'给发送的邮件附加上一个附件
mailObj.Attachments.Add(New MailAttachment("c:\aa.doc"))
smTp.Send(mailObj)
End Sub
3、在VB.NET或C#开发Windows 应用程序中使用System.Net.Sockets
也是基于SMTP协议
一、SMTP协议简介
1、 客户端通过服务器的25端口建立TCP/IP连接
服务器端: 220 server.com Simple Mail Transfer Service Ready
2、 客户端使用“HELO”命令标识发件人
客户端:HELO server.com
服务器端:250 server.com
3、 客户端发送MAIL命令,服务器端以OK作为响应表明准备接收
客户端: MAIL FROM: <A@B.com>
服务器端: 250 OK
4、 客户端发送RCPT命令标识收件人,服务器端回应是否愿意为收件人接受邮件
客户端:RCPT TO: <c@d.com>
服务器端:250 OK
5、 协商结束后用命令DATA发送发送邮件
客户端:DATA
服务器端:354 Start mail input: end with <CRLF>.<CRLF>
6、 客户端以.表示结束输入内容一起发送出去
客户端:Subject: <CRLF>
内容<CRLF>
.<CRLF>
7、客户端用QUIT命令退出。
客户端:QUIT
服务器端:250 server.com closing transmission channel
优点:可以在此基础上开发出自己的组件,利用Sockets我们可以进行网络编程开发
缺点:程序量相对较多,
发送邮件的代码如下:
Dim sendData As String
Dim szData As Byte()
Dim CRLF As String
CRLF = "\r\n"
'创建与服务器25端口的连接
Dim SmtpServ As New TcpClient(txtsmtp.Text, 25)
lstlog.Items.Clear()
'显示服务器初始信息
Dim NetStrm As NetworkStream
NetStrm = SmtpServ.GetStream()
Dim RdStrm As New StreamReader(SmtpServ.GetStream())
If RdStrm.ReadLine() <> "" Then lstlog.Items.Add(RdStrm.ReadLine())
'
sendData = "HELO server " + CRLF
szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray())
NetStrm.Write(szData, 0, szData.Length)
lstlog.Items.Add(RdStrm.ReadLine())
'标志发件人
sendData = "MAIL FROM: " + "<" + txtfrom.Text + ">" + CRLF
szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray())
NetStrm.Write(szData, 0, szData.Length)
lstlog.Items.Add(RdStrm.ReadLine())
'标志收件人
sendData = "RCPT TO: " + "<" + txtTo.Text + ">" + CRLF
szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray())
NetStrm.Write(szData, 0, szData.Length)
lstlog.Items.Add(RdStrm.ReadLine())
'准备发送内容
sendData = "DATA " + CRLF
szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray())
NetStrm.Write(szData, 0, szData.Length)
lstlog.Items.Add(RdStrm.ReadLine())
'发送主题
sendData = "SUBJECT: " + txtsub.Text + CRLF
'发送内容
sendData = sendData + txtmsg.Text + CRLF
'结束发送
sendData = sendData + "." + CRLF
szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray())
NetStrm.Write(szData, 0, szData.Length)
lstlog.Items.Add(RdStrm.ReadLine())
'退出
sendData = "QUIT " + CRLF
szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray())
NetStrm.Write(szData, 0, szData.Length)
lstlog.Items.Add(RdStrm.ReadLine())
'关闭连接
NetStrm.Close()
RdStrm.Close()
lstlog.Items.Add("连接关闭")
lstlog.Items.Add("发送成功")
大家还可以参考:使用C# 创建邮件发送组件(SMTP)
http://www.aspcool.com/lanmu/browse1.asp?ID=968&bbsuser=csharp
4、IIS SMTP自带的基本的发信组件CDONTS
你不必专门下载,微软已经提供了这个组件,只要安装了2000,NT的SMTP就会有的。
优点:组件由操作系统自带
缺点:功能比较差,可扩展性不强
Mymail = CreateObject("CDONTS.NewMail")
Mymail.From = *** '信件发送者信箱
Mymail.To = *** ‘信件接收者信箱
Mymail.CC = *** '抄送
Mymail.BCC = *** ’密件发送
Mymail.Subject = *** ‘信件主题
Mymail.Body = *** ’信件正文
'设置优先级,0-不重要,1-一般,2-重要。
Mymail.Importance = 2
Mymail.Send()
Mymail = Nothing
5、使用JMail组件
Jmail具有以下特点:
(1)可以发送附件;
(2)详细日志能力,便于你查看问题所在;
(3)设置邮件发送的优先级;
(4)支持多种格式的邮件发送,比如说以HTML或者TXT的方式发送邮件。这是个免费的组件。
(5)密件发送/(CC)抄送/紧急信件发送能力;
(6)最关键的就是--免费的组件,不必发钱,所以非常值得使用。
网站:http://www.dimac.net/,目前版本是4.3
JMail组件的常用属性:
Body   邮件正文
Logging   调用Log记录,供Debug用
Priority   邮件的优先程度,从1到5
Sender   发件人
ServerAddress   SMTP服务器的IP地址或名称
Subject   邮件标题
JMail组件的常用方法:
AddAttachment   指定附件文件
AddRecipient   加入一个收件人
AddRecipientBCC   隐藏的副本抄送,只有发件人和BCC收件人知道。
AddRecipientCC   副本抄送
Execute   送出邮件
了解必要的属性及方法后,余下的部分接收使用者输入的Email,当成参数传给AddRecipient方法,然后根据需要填上其余属性,最后以Execute方法寄出。例如:
Dim JMail
JMail = Server.CreateObject("JMail.SMTPMail")
JMail.Logging = True
JMail.ServerAddress = "202.96.144.48"
JMail.Sender = "lihonggen0@163.com"
JMail.Subject = "subject."
JMail.Body = "body."
JMail.AddRecipient("bbbb@163.com")
JMail.AddAttachment("c:\go.gif")
JMail.Priority = 3
JMail.Execute()
JMail = Nothing
总结:选择何种方案,视程序的用途和需求而定,本文例出的几种方案,供大家参考。例如用友软件U8,调用outlook组件,一样整合到自己的软件中。我编写的管理系统,自己写组件(SMTP),功能同样强大,不过Coding的时间就长了!
分享到:
评论

相关推荐

    解决阿里云邮件发送不能使用25端口问题

    试了几种解决方案,都解决了问题。现在整理如下:(不用去尝试申请解禁25端口的,可以很认真负责的告诉你,完全没有卵用) 首先,是阿里大大给的官方的解决方案,用SMTP发送邮件:代码如下 # -*- coding:utf-8 -*- ...

    2012电子邮件营销行业白皮书V1.0版

    本书基于CloudMail进入中国地区近几年服务了上千家客户以及成功发送了数十亿营销邮件,对教育/培训,传统企业,国内B2C电商企业,金融等行业的邮件营销市场进行细分研究,提供各行各业不同的解决方案!

    电脑变慢de完全解决方案.

    电脑变慢de完全解决方案  一、软件篇  1、设定虚拟内存  硬盘中有一个很宠大的数据交换文件,它是系统预留给虚拟内存作暂存的地方,很多应用程序都经常会使用到,所以系统需要经常对主存储器作大量的数据存取...

    VC++通用GIS功能开发解决方案

    8、实现发送邮件和访问主页功能; 9、实现真彩位图,图标,光标大应用,你可以在软件中发现大量真彩技术的应用; 10、实现树目录复选图标,彻底解放图层控制。 ! 更多细节请参考“VC++界面一揽子解决方案”3.0v...

    BlackBerry开发平台配置及入门介绍(傻瓜教程)

    BlackBerry是一种优秀的无线企业解决方案、许多企业井在电子邮件应用的基础上、进一步延伸企业信息。  以后中国的客户也有福气了,可以使用此项业务了。请看下面的转载新闻:  5.17世界电信日中国移动通信宣布,...

    Vagrant_CoreOS_Docker:用于设置 vagrant 的环境,该环境使用 docker 映像上的标准 nginx 服务器启动 CoreOS 映像

    Vagrant_CoreOS_Docker 安装容器 克隆这个仓库 确保也安装了 vagrant 和 virtualbox 调整 vagrantfile 来安装你需要的容器 从此存储库运行vagrant up ...对此有几种可能的解决方案。 通过打开文件

    level1~2题库-考试通.xlsx

    共有几种解决方案: 客户代表可以在需要跨系统同步多个数据时启动机器人。只需按下按钮,机器人即可在几毫秒内完成所有操作。 可以为常见查询创建仪表板。客户代表将填写必要的数据以解决问题,而机器人将在多个...

    Free Staff Roster Generator-crx插件

    语言:English 使用我们便捷的员工名册生成器和制作工具创建,...保存您的花名册,复制日程安排并将其直接通过电子邮件发送给您的员工-所有这些都在一个直观的Web界面下进行。 ScheduleBee是最简单的员工名册解决方案。

    物联网安全_实验9 信息保密性、完整性和不可抵赖性的综合应用.doc

    PGP提供几种可选的方案以减少用户公钥环中包含错误公钥的可能性:(1)物理上得到对方的公钥。这种方式最可靠,但有一定局限性;(2)通过电话验证公钥;(3)从双方都信任的第三方(个体或CA)处获得对方的公钥。 ...

    Windows应用程序捆绑核心编程光盘代码

    7.2 常见的几种创建进程的方法 148 7.2.1 使用WinExec() 函数 148 7.2.2 使用ShellExecute()和ShellExecuteEx()函数 149 7.2.3 使用CreateProcess()函数 151 7.2.4 使用OLE激活服务程序 154 7.3 如何获得进程...

    Multi Email Forward by cloudHQ-crx插件

    这是一种选择所有您想转发的电子邮件并将其发送给1个收件人的快速方法。 即使关闭Gmail,浏览器甚至PC,一切仍将继续进行,就好像您一次花时间转发1封电子邮件一样。 需要迁移您的帐户吗? 如果您想将整个电子邮件...

    移动营销策划方案设计.doc

    而短信 群发只是众多移动营销的手段之一,是移动营销整体解决方案的一个环节。所以说,移 动营销和短信群发是不一样的。 1.3移动营销特点 (1)App成为移动广告新载体; (2)社交+移动成为带消费者进店的最直接手段...

    SlackAPI:Slack团队通信平台API的.NET实现

    SlackAPI 这是用C#编写的Slack API的第三方实现。 这支持他们的WebAPI以及他们的实时消息API。 例子 可以在Wiki上找到一些... 您有两种选择来构建解决方案: 卸载SlackAPI.Tests项目,您就可以构建SlackAPI解决方案

    计算机网络常见问题解答

    问题3-29:在一些文献和教材中,可以见到关于以太网的“前同步码”(preamble)有两种不同的说法。一种说法是:前同步码共8个字节。另一种说法是:前同步码共7个字节,而在前同步码后面还有一个字节的“帧开始定界符”...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    1.2.4 Android移动Web项目开发的三种解决方案:Native, Web和Hybrid优缺陷分析 4 1.2.5国内外应用现状 6 1.2.6 研究现状总结 7 1.3研究目标与内容 7 1.3.1多窗口浏览器模式的实现机制 7 1.3.2跨域交互即缓存处理方法...

    移动营销策划方案设计(1).doc

    而短信 群发只是众多移动营销的手段之一,是移动营销整体解决方案的一个环节。所以说,移 动营销和短信群发是不一样的。 1.3移动营销特点 (1)App成为移动广告新载体; (2)社交+移动成为带消费者进店的最直接手段...

    【精品】网络安全设计.doc

    8文档改名一位雇员可以在一份不同的文件中保存关键业务信息,并给这份文件取一个随 机的和毫不相关的名字,然后将文件用电子邮件发送到自己家里的计算机,寄送给一位 朋友,甚至寄送给一家企业竞争对手。...

Global site tag (gtag.js) - Google Analytics