首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#调用outlook发邮件,该如何解决

2012-03-09 
C#调用outlook发邮件C#调用outlook发邮件,自动将收件人,主题,内容,附件添加进去。最好是不弹出哪个outlook

C#调用outlook发邮件
C#调用outlook发邮件,自动将收件人,主题,内容,附件添加进去。最好是不弹出哪个outlook对话框就能直接发送

[解决办法]

C# code
//用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!"); }  }
[解决办法]
C# code
//判断是否连通邮件服务商     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服务器了?

[解决办法]
为什么要调用outlook呢?直接调用sentmail函数发送
[解决办法]
理论上是不可以的,因为那是黑客行为.
但实际上以前的一些病毒利用IE的漏洞确实是这么发邮件的,你可以找那些染过病毒的网页看看源代码就行了,估计在现在的浏览器里行不通了.
[解决办法]
就算OUTLOOK也要SMTP服务器啊。。。除非你的OUTLOOK已经配置好了。。。

如果不要SMTP,那你这个东西放到OUTLOOK没配置的机器一样没用,比如我从来不用OUTLOOK

热点排行