C#发送邮件的问题
项目中碰到一个问题,需要用c#来发送批量email,并且要通过调用outlook2003或outlook express 6.0来发(因为希望在客户端留下送信履历),但用outlook2003发的话,会碰到弹出 有程序试图用你的名义发送邮件 的安全警告对话框,批量发送的时候发几个弹几次,客户肯定不会接受的,另一方面outlook express 我找了很久没找到相关api,也搞不定。请问2003有没有办法把这个警告框去掉,或是OUTLOOK EXPRESS实现发信的功能。先谢谢了 --------------------编程问答-------------------- C# 异步邮件批量发送程序(转)前一段时间使用 System.Net.Mail.MailMessage 类写了一个邮件批量发送的程序,在调试和测试中遇到的一些问题和大家共享一下,希望能够对大家有所帮助。
用MailMessage 类发送邮件的方法有很多,但我推荐使用异步方式发送邮件,尤其是发送批量邮件,这是因为程序在向邮件服务器提交多个邮件时,同步方式是等到上一封邮件提交完成并且有发送状态返回,才开始发送下一封,如果这时连接邮件服务器的网络比较慢,没有及时响应,那么程序一直处于等待状态,会影响后面的发送,有时还会产生重复提交,使收件人收到多封重复邮件。
下面是一个异步发送的实例。
--------------------编程问答-------------------- 谢谢,不过需求是希望通过outlook2003或outlook express来发送,而不是直接用SMTP来连接邮件服务器来发送。
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;
}
}
}
}
--------------------编程问答-------------------- Attaching Files and Creating New Mails in Outlook
效果图:
--------------------编程问答-------------------- 上面那个是codeproject上的一篇文章,实现了利用outlook组件发送邮件,你可以参考。 --------------------编程问答--------------------
--------------------编程问答-------------------- 同样谢谢楼上,但那个程序其实是等于自己做了一个mail客户端,里面还是用SMTP来实现送信的,我希望的是通过调用outlook或outlook express的api来送信这样就能在outlook 或 outlook express 客户端留下送信纪录。
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();
--------------------编程问答-------------------- VS工具可以创建个 outlook外接程序。你可以试一试! --------------------编程问答-------------------- addin我也试过了,启动后就让outlook送信,但还是出安全警告。
--------------------编程问答--------------------
友情帮顶下!顺便学习学习!
--------------------编程问答--------------------
貌似楼上的就是用outlook2003吧.
补充:.NET技术 , .NET Framework