C#调用outlook发邮件 C#调用outlook发邮件,自动将收件人,主题,内容,附件添加进去。最好是不弹出哪个outlook对话框就能直接发送 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在html里面直接使用下面的语句! mailto:[email protected]<a href=mailto:[email protected]?subject=主题&bc=xx&cc=yy&body=something>mailto</a> //用vs2005,只需要加一个com组件,名称是:Microsoft outlook 11.0 object library using System.Net.Mail; /// <summary> /// 发送邮件的方法 /// </summary> /// <param name="strSender">发件人邮箱地址</param> /// <param name="strPass">发件人邮箱密码</param>/// <param name="Toer">收件人邮箱地址</param> public void MailMessage(string strSender, string strPass, string Toer) { try{ MailAddress from = new MailAddress(strSender, "发件人的名称");//发件人邮箱地址 MailAddress to = new MailAddress(Toer, "收件人的名称");//收件人邮箱地址MailMessage mailMsg = new MailMessage(from, to);mailMsg.Body = "我成功了! "; //所要发送的文本mailMsg.Subject = "你好";//邮箱标题SmtpClient client = new SmtpClient("smtp.163.com");//smtp服务器地址// Include credentials if the server requires them.client.Credentials = CredentialCache.DefaultNetworkCredentials;client.Send(mailMsg);MessageBox.Show("OK");} catch (System.Exception ex) { MessageBox.Show("Error!"); } } //判断是否连通邮件服务商 public static bool SmtpProviderStatus(string pingaddress) { Process p = new Process(); p.StartInfo.FileName = "cmd.exe"; p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardInput = true; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.RedirectStandardError = true; p.StartInfo.CreateNoWindow = true; string pingrst; p.Start(); p.StandardInput.WriteLine("ping -n 1 " + pingaddress); p.StandardInput.WriteLine("exit"); string strRst = p.StandardOutput.ReadToEnd(); if (strRst.IndexOf("(0% loss)") != -1) pingrst = "连接"; else if (strRst.IndexOf("Destination host unreachable.") != -1) pingrst = "无法到达目的主机"; else if (strRst.IndexOf("Request timed out.") != -1) pingrst = "超时"; else if (strRst.IndexOf("Unknown host") != -1) pingrst = "无法解析主机"; else pingrst = strRst; if (pingrst != "连接") { return false; } else { return true; } } //判断是否已经开启端口 public static bool Smtpport(string websiteaddress) { bool openstatus = false; System.Net.IPAddress ip = System.Net.IPAddress.Parse(websiteaddress); System.Net.IPEndPoint point = new System.Net.IPEndPoint(ip, 25); try { System.Net.Sockets.TcpClient tc = new System.Net.Sockets.TcpClient(); tc.Connect(ip, 25); openstatus = true; } catch { openstatus = false; } return openstatus; } //返回电子邮件地址 public static string[] returnmailaddress(string name) { SqlParameter[] p ={ new SqlParameter("name",name) }; DataTable dt = Oacommand.ExecuteTable("P_returnmailaddress", p); string[] s = new string[dt.Rows.Count]; for (int i = 0; i < dt.Rows.Count; i++) { s[i] = dt.Rows[i][0].ToString(); } return s; } //发送电子邮件 public static void Sendmail(string ReceiveName, string Topic, string Content) { if (ConfigurationManager.AppSettings["AllowsendEmail"].ToString() == "yes") { string smtpaddress = ConfigurationManager.AppSettings["SmtpAddress"].ToString(); //判断是否连接 if (SmtpProviderStatus(smtpaddress) == false) { System.Web.HttpContext.Current.Response.Write(" <script>window.confirm('当前邮件服务存在问题,是否放弃发送继续操作?') </script>"); } else { //判断端口是否打开 string SmtpProviderAddress = ConfigurationManager.AppSettings["SmtpProviderAddress"].ToString(); if (Smtpport(SmtpProviderAddress) == false) { System.Web.HttpContext.Current.Response.Write(" <script>window.confirm('当前邮件服务存在问题,是否放弃发送继续操作?') </script>"); } else { string[] ReceiverAddress = returnmailaddress(ReceiveName); for (int i = 0; i < ReceiverAddress.Length; i++) { MailMessage message = new MailMessage(); message.To.Add(new MailAddress(ReceiverAddress[i])); //收件人邮箱 message.Subject = Topic;//邮件主题 message.Body = Content; //邮件正文 SmtpClient mailClient = new SmtpClient(); mailClient.Send(message); } } } } else { Oasystem.ShowMessage("当前邮件发送为关闭状态"); } } 我这里COM组件没Microsoft outlook 11.0 object library 只有Microsoft outlook 9.0 object library是因为OFFICE版本问题吗? 另外问下zzxap你怎么还用到smtp服务器了? 11的话才2003版的吧,你的office也太旧了。。 顺便说句,不经过域验证的那些服务器,连outlook功能都不需要用,直接写流就行…… 我要的是调用outlook发邮件,不是用SMTP http://blog.csdn.net/nothing7/archive/2006/08/17/1077092.aspx 为什么要调用outlook呢?直接调用sentmail函数发送 呵呵,经理这么说的我有什么办法 直接调用send函数我也知道行的 直接调用send函数里面好象只有4个参数,没有附件 我调用outlook发邮件,它会提示程序是病毒,询问是否继续发送,发送成功后,接收邮件没有附件 理论上是不可以的,因为那是黑客行为.我打开你的网页的时候你偷偷用我的outlook发邮件我会同意吗? 但实际上以前的一些病毒利用IE的漏洞确实是这么发邮件的,你可以找那些染过病毒的网页看看源代码就行了,估计在现在的浏览器里行不通了.你可以在客户端用脚本创建outlook组件发送邮件,但前题是你的应用的地址被设为受信任站点.你们经理肯定想干坏事,告诉他这行不通.另外楼主别忘了给我加分,如果你找到了解决方案我送100分给你. 就算OUTLOOK也要SMTP服务器啊除非你的OUTLOOK已经配置好了如果不要SMTP,那你这个东西放到OUTLOOK没配置的机器一样没用,比如我从来不用OUTLOOK - -这个,分多的话……求送分这个用一段bat都能实现……只是不能发附件而已,只要是没要求域认证的,都可以直接发送的吧,至少新浪什么的都可以lz也没说是用web的啊 那感觉还是2楼的方法好而且,office组件调用一般都可以设为不显示界面的http://msdn.microsoft.com/zh-cn/library/ms268749(VS.80).aspxmsdn示例 //用vs2005,只需要加一个com组件,名称是:Microsoft outlook 11.0 object library using System.Net.Mail; /// <summary> /// 发送邮件的方法 /// </summary> /// <param name="strSender">发件人邮箱地址</param> /// <param name="strPass">发件人邮箱密码</param>/// <param name="Toer">收件人邮箱地址</param> public void MailMessage(string strSender, string strPass, string Toer) { try{ MailAddress from = new MailAddress(strSender, "发件人的名称");//发件人邮箱地址 MailAddress to = new MailAddress(Toer, "收件人的名称");//收件人邮箱地址MailMessage mailMsg = new MailMessage(from, to);mailMsg.Body = "我成功了! "; //所要发送的文本mailMsg.Subject = "你好";//邮箱标题SmtpClient client = new SmtpClient("smtp.163.com");//smtp服务器地址// Include credentials if the server requires them.client.Credentials = CredentialCache.DefaultNetworkCredentials;client.Send(mailMsg);MessageBox.Show("OK");} catch (System.Exception ex) { MessageBox.Show("Error!"); } } 添加引用Microsoft.Office.Interop.Outlook; Microsoft.Office.Interop.Outlook.Application outlookObj = new Microsoft.Office.Interop.Outlook.Application(); MailItem Item = (Microsoft.Office.Interop.Outlook.MailItem)outlookObj.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem); Item.To = "[email protected]"; Item.Subject = "test"; Item.Body = "hello"; ((Microsoft.Office.Interop.Outlook._MailItem)Item).Send(); 这样发送的东西会保存在OUTLOOK的已发件箱里嘛? 问个简单字符串问题? c# hook api Managed DirectX 程序发布问题 《C#入门经典(第三版)》错了?! 想做一个这样的通用窗体,供调用,不会,求大家看看 如何实现VB的redim功能? 界面的问题,对了马上给分!谢谢 怎样将内容按倒序保存到XML文件中? 200分~~老问题~~字符窜分解~~ saucer(思归)请再看看! 请问斑竹:c#中有类似exit(0)之类的函数吗, datatable创建行,并为行赋值(列已固定) 关于c#填写表单,怎么去设置下拉框的值(自己去设值,不用网页的值)
mailto:[email protected]
<a href=mailto:[email protected]?subject=主题&bc=xx&cc=yy&body=something>mailto</a>
//用vs2005,只需要加一个com组件,名称是:Microsoft outlook 11.0 object library using System.Net.Mail; /// <summary> /// 发送邮件的方法 /// </summary> /// <param name="strSender">发件人邮箱地址</param> /// <param name="strPass">发件人邮箱密码</param>/// <param name="Toer">收件人邮箱地址</param> public void MailMessage(string strSender, string strPass, string Toer) { try{ MailAddress from = new MailAddress(strSender, "发件人的名称");//发件人邮箱地址 MailAddress to = new MailAddress(Toer, "收件人的名称");//收件人邮箱地址MailMessage mailMsg = new MailMessage(from, to);mailMsg.Body = "我成功了! "; //所要发送的文本mailMsg.Subject = "你好";//邮箱标题SmtpClient client = new SmtpClient("smtp.163.com");//smtp服务器地址// Include credentials if the server requires them.client.Credentials = CredentialCache.DefaultNetworkCredentials;client.Send(mailMsg);MessageBox.Show("OK");} catch (System.Exception ex) { MessageBox.Show("Error!"); } }
public static bool SmtpProviderStatus(string pingaddress)
{
Process p = new Process(); p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
string pingrst;
p.Start();
p.StandardInput.WriteLine("ping -n 1 " + pingaddress);
p.StandardInput.WriteLine("exit");
string strRst = p.StandardOutput.ReadToEnd();
if (strRst.IndexOf("(0% loss)") != -1)
pingrst = "连接"; else if (strRst.IndexOf("Destination host unreachable.") != -1)
pingrst = "无法到达目的主机"; else if (strRst.IndexOf("Request timed out.") != -1)
pingrst = "超时"; else if (strRst.IndexOf("Unknown host") != -1)
pingrst = "无法解析主机"; else
pingrst = strRst;
if (pingrst != "连接")
{
return false;
}
else
{
return true;
}
}
//判断是否已经开启端口
public static bool Smtpport(string websiteaddress)
{
bool openstatus = false;
System.Net.IPAddress ip = System.Net.IPAddress.Parse(websiteaddress);
System.Net.IPEndPoint point = new System.Net.IPEndPoint(ip, 25);
try
{
System.Net.Sockets.TcpClient tc = new System.Net.Sockets.TcpClient();
tc.Connect(ip, 25);
openstatus = true;
}
catch
{
openstatus = false;
}
return openstatus;
}
//返回电子邮件地址
public static string[] returnmailaddress(string name)
{
SqlParameter[] p ={
new SqlParameter("name",name)
};
DataTable dt = Oacommand.ExecuteTable("P_returnmailaddress", p);
string[] s = new string[dt.Rows.Count];
for (int i = 0; i < dt.Rows.Count; i++)
{
s[i] = dt.Rows[i][0].ToString();
}
return s;
}
//发送电子邮件
public static void Sendmail(string ReceiveName, string Topic, string Content)
{
if (ConfigurationManager.AppSettings["AllowsendEmail"].ToString() == "yes")
{
string smtpaddress = ConfigurationManager.AppSettings["SmtpAddress"].ToString();
//判断是否连接
if (SmtpProviderStatus(smtpaddress) == false)
{
System.Web.HttpContext.Current.Response.Write(" <script>window.confirm('当前邮件服务存在问题,是否放弃发送继续操作?') </script>");
}
else
{
//判断端口是否打开
string SmtpProviderAddress = ConfigurationManager.AppSettings["SmtpProviderAddress"].ToString();
if (Smtpport(SmtpProviderAddress) == false)
{
System.Web.HttpContext.Current.Response.Write(" <script>window.confirm('当前邮件服务存在问题,是否放弃发送继续操作?') </script>");
}
else
{
string[] ReceiverAddress = returnmailaddress(ReceiveName);
for (int i = 0; i < ReceiverAddress.Length; i++)
{
MailMessage message = new MailMessage();
message.To.Add(new MailAddress(ReceiverAddress[i])); //收件人邮箱
message.Subject = Topic;//邮件主题
message.Body = Content; //邮件正文
SmtpClient mailClient = new SmtpClient();
mailClient.Send(message);
}
}
}
}
else
{
Oasystem.ShowMessage("当前邮件发送为关闭状态");
}
}
只有Microsoft outlook 9.0 object library
是因为OFFICE版本问题吗?
另外问下zzxap你怎么还用到smtp服务器了?
但实际上以前的一些病毒利用IE的漏洞确实是这么发邮件的,你可以找那些染过病毒的网页看看源代码就行了,估计在现在的浏览器里行不通了.你可以在客户端用脚本创建outlook组件发送邮件,但前题是你的应用的地址被设为受信任站点.你们经理肯定想干坏事,告诉他这行不通.另外楼主别忘了给我加分,如果你找到了解决方案我送100分给你.
- -这个,分多的话……求送分
这个用一段bat都能实现……只是不能发附件而已,只要是没要求域认证的,都可以直接发送的吧,至少新浪什么的都可以
lz也没说是用web的啊
而且,office组件调用一般都可以设为不显示界面的http://msdn.microsoft.com/zh-cn/library/ms268749(VS.80).aspx
msdn示例
//用vs2005,只需要加一个com组件,名称是:Microsoft outlook 11.0 object library using System.Net.Mail; /// <summary> /// 发送邮件的方法 /// </summary> /// <param name="strSender">发件人邮箱地址</param> /// <param name="strPass">发件人邮箱密码</param>/// <param name="Toer">收件人邮箱地址</param> public void MailMessage(string strSender, string strPass, string Toer) { try{ MailAddress from = new MailAddress(strSender, "发件人的名称");//发件人邮箱地址 MailAddress to = new MailAddress(Toer, "收件人的名称");//收件人邮箱地址MailMessage mailMsg = new MailMessage(from, to);mailMsg.Body = "我成功了! "; //所要发送的文本mailMsg.Subject = "你好";//邮箱标题SmtpClient client = new SmtpClient("smtp.163.com");//smtp服务器地址// Include credentials if the server requires them.client.Credentials = CredentialCache.DefaultNetworkCredentials;client.Send(mailMsg);MessageBox.Show("OK");} catch (System.Exception ex) { MessageBox.Show("Error!"); } }
MailItem Item = (Microsoft.Office.Interop.Outlook.MailItem)outlookObj.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem); Item.To = "[email protected]"; Item.Subject = "test"; Item.Body = "hello"; ((Microsoft.Office.Interop.Outlook._MailItem)Item).Send();