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

解决方案 »

  1.   

    在html里面直接使用下面的语句!   
      mailto:[email protected]
    <a   href=mailto:[email protected]?subject=主题&bc=xx&cc=yy&body=something>mailto</a>   
        
      

  2.   


    //用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!"); }  }
      

  3.   

    //判断是否连通邮件服务商 
        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("当前邮件发送为关闭状态"); 
            } 
        }
      

  4.   

    我这里COM组件没Microsoft outlook 11.0 object library 
    只有Microsoft outlook 9.0 object library
    是因为OFFICE版本问题吗? 
    另外问下zzxap你怎么还用到smtp服务器了?
      

  5.   

    11的话才2003版的吧,你的office也太旧了。。
      

  6.   

    顺便说句,不经过域验证的那些服务器,连outlook功能都不需要用,直接写流就行……
      

  7.   

    我要的是调用outlook发邮件,不是用SMTP
      

  8.   

    http://blog.csdn.net/nothing7/archive/2006/08/17/1077092.aspx
      

  9.   

    为什么要调用outlook呢?直接调用sentmail函数发送
      

  10.   

    呵呵,经理这么说的我有什么办法 直接调用send函数我也知道行的
      

  11.   

    直接调用send函数里面好象只有4个参数,没有附件
      

  12.   

    我调用outlook发邮件,它会提示程序是病毒,询问是否继续发送,发送成功后,接收邮件没有附件
      

  13.   

    理论上是不可以的,因为那是黑客行为.我打开你的网页的时候你偷偷用我的outlook发邮件我会同意吗? 
    但实际上以前的一些病毒利用IE的漏洞确实是这么发邮件的,你可以找那些染过病毒的网页看看源代码就行了,估计在现在的浏览器里行不通了.你可以在客户端用脚本创建outlook组件发送邮件,但前题是你的应用的地址被设为受信任站点.你们经理肯定想干坏事,告诉他这行不通.另外楼主别忘了给我加分,如果你找到了解决方案我送100分给你.
      

  14.   

    就算OUTLOOK也要SMTP服务器啊除非你的OUTLOOK已经配置好了如果不要SMTP,那你这个东西放到OUTLOOK没配置的机器一样没用,比如我从来不用OUTLOOK
      

  15.   


    - -这个,分多的话……求送分
    这个用一段bat都能实现……只是不能发附件而已,只要是没要求域认证的,都可以直接发送的吧,至少新浪什么的都可以
    lz也没说是用web的啊
      

  16.   

    那感觉还是2楼的方法好
    而且,office组件调用一般都可以设为不显示界面的http://msdn.microsoft.com/zh-cn/library/ms268749(VS.80).aspx
    msdn示例
      

  17.   


    //用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!"); }  }
      

  18.   

    添加引用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();
      

  19.   

    这样发送的东西会保存在OUTLOOK的已发件箱里嘛?