当前位置:编程学习 > C#/ASP.NET >>

C#发送邮件的问题

项目中碰到一个问题,需要用c#来发送批量email,并且要通过调用outlook2003或outlook express 6.0来发(因为希望在客户端留下送信履历),但用outlook2003发的话,会碰到弹出 有程序试图用你的名义发送邮件 的安全警告对话框,批量发送的时候发几个弹几次,客户肯定不会接受的,另一方面outlook express 我找了很久没找到相关api,也搞不定。请问2003有没有办法把这个警告框去掉,或是OUTLOOK EXPRESS实现发信的功能。先谢谢了 --------------------编程问答-------------------- C# 异步邮件批量发送程序(转)

前一段时间使用 System.Net.Mail.MailMessage 类写了一个邮件批量发送的程序,在调试和测试中遇到的一些问题和大家共享一下,希望能够对大家有所帮助。

用MailMessage 类发送邮件的方法有很多,但我推荐使用异步方式发送邮件,尤其是发送批量邮件,这是因为程序在向邮件服务器提交多个邮件时,同步方式是等到上一封邮件提交完成并且有发送状态返回,才开始发送下一封,如果这时连接邮件服务器的网络比较慢,没有及时响应,那么程序一直处于等待状态,会影响后面的发送,有时还会产生重复提交,使收件人收到多封重复邮件。

下面是一个异步发送的实例。


using System; 
using System.ComponentModel; 
using System.Net; 
using System.Net.Mail; 

namespace MailSendExample 


//异步发送,获取发送状态 
static bool mailSent = false; 
public static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e) 


if (e.Cancelled) 

mailSent = false; 

if (e.Error != null) 

mailSent = false; 

else 

mailSent = true; 





public static bool SendMail(string fromEmail, string fromName, string reEmail, string toEmail, string mailTitle, string mailBody) 


//格式化Email,收件人支持半角逗号分隔的多个Email 
toEmail = toEmail.Replace(";", ","); 
toEmail = toEmail.Replace(";", ","); 
toEmail = toEmail.Replace(",", ","); 



MailMessage mail = new MailMessage(); 
try 

//发件人,发件人名 
mail.From = new MailAddress( fromEmail, fromName); 
//回复人,回复人名 
mail.ReplyTo = new MailAddress(reEmail, fromName); 
//收件人 
mail.To.Add(toEmail); 
//邮件优先级 
mail.Priority = MailPriority.Normal; 
//设置html邮件 
mail.IsBodyHtml = true; 
//标题 
mail.Subject = mailTitle; 
//内容 
mail.Body = mailBody; 

catch (Exception ex) 

//错误日志记录 
Logger.WriteLine("SendMail_ErrorMail:" + ex.Message + "|" + toEmail); 
return false; 



try 

//邮件服务器 
string SMTPServer = "mail.aaaa.com"; 
//发送帐号 
string SMTPAuthUsername = "bbb@aaaa.com"; 
//发送账户的密码 
string SMTPAuthPassword = "123456"; 
//定义传输协议 
SmtpClient smtp = new SmtpClient(SMTPServer); 
//设置认证发件人 
smtp.Credentials = new NetworkCredential(SMTPAuthUsername, SMTPAuthPassword); 
//异步发送完成获取发送状态 
smtp.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback); 

//调试 
//Logger.WriteLine("SendMail:" + mail.To + "|" + mail.From ); 

//异步发送 
smtp.SendAsync(mail, String.Empty); 

return mailSent; 

catch (Exception ex) 

Logger.WriteLine("SendMail_Send:" + ex.Message + "|" + SMTPServer); 
return false; 







 
--------------------编程问答-------------------- 谢谢,不过需求是希望通过outlook2003或outlook express来发送,而不是直接用SMTP来连接邮件服务器来发送。
--------------------编程问答-------------------- Attaching Files and Creating New Mails in Outlook

效果图:
--------------------编程问答-------------------- 上面那个是codeproject上的一篇文章,实现了利用outlook组件发送邮件,你可以参考。 --------------------编程问答--------------------

using Outlook=Microsoft.Office.Interop.Outlook;    

Class ClassDisplayMail
{
    Public void DisplayOutlook()
    {
         Outlook.Application objApp =new Outlook.Applicaiton();
         Outlook.MailItem mail=null;
         mail=(Outlook.MailItem)objApp.CreateItem(Outlook.OlItemType.olMailItem);
         //The CreateItem method returns an object which has to be typecast to MailItem 
         //before using it.
         mail.Attachments.Add((object)@"C:\me.doc",
Outlook.OlAttachmentType.olEmbeddeditem,
     1, (object)"Attachment");
    //The parameters are explained below
    mail.To="me@abc.com;test@def.com";
    mail.Cc="con@def.com";//All the mail lists have to be separated by the ';'
    }
}
//Then we can use either of the following: Add the following code after mail.Cc

//To send email:
mail.Send();
//To show email window
mail.Display();
--------------------编程问答-------------------- 同样谢谢楼上,但那个程序其实是等于自己做了一个mail客户端,里面还是用SMTP来实现送信的,我希望的是通过调用outlook或outlook express的api来送信这样就能在outlook 或 outlook express 客户端留下送信纪录。
--------------------编程问答-------------------- VS工具可以创建个 outlook外接程序。你可以试一试! --------------------编程问答-------------------- addin我也试过了,启动后就让outlook送信,但还是出安全警告。
--------------------编程问答--------------------
友情帮顶下!顺便学习学习!
--------------------编程问答--------------------
引用 2 楼 t2money11 的回复:
谢谢,不过需求是希望通过outlook2003或outlook express来发送,而不是直接用SMTP来连接邮件服务器来发送。

貌似楼上的就是用outlook2003吧.
补充:.NET技术 ,  .NET Framework
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,