C#调用outlook发邮件

love41349279 2009-04-08 11:05:26
C#调用outlook发邮件,自动将收件人,主题,内容,附件添加进去。最好是不弹出哪个outlook对话框就能直接发送
...全文
1951 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
xleefox 2011-12-30
  • 打赏
  • 举报
回复
这样发送的东西会保存在OUTLOOK的已发件箱里嘛?
zhangzhaoxin555 2011-09-07
  • 打赏
  • 举报
回复
添加引用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 = "zhangzhx@inspur.com";

Item.Subject = "test";

Item.Body = "hello";

((Microsoft.Office.Interop.Outlook._MailItem)Item).Send();
Alfredknox 2009-07-31
  • 打赏
  • 举报
回复

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

}
meheartfly 2009-04-10
  • 打赏
  • 举报
回复
奶奶个熊的,变态经理!!!
himoggy 2009-04-08
  • 打赏
  • 举报
回复
顺便说句,不经过域验证的那些服务器,连outlook功能都不需要用,直接写流就行……
mykelly6 2009-04-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 love41349279 的回复:]
我这里COM组件没Microsoft outlook 11.0 object library
只有Microsoft outlook 9.0 object library
是因为OFFICE版本问题吗?
另外问下zzxap你怎么还用到smtp服务器了?
[/Quote]
11的话才2003版的吧,你的office也太旧了。。
love41349279 2009-04-08
  • 打赏
  • 举报
回复
我这里COM组件没Microsoft outlook 11.0 object library
只有Microsoft outlook 9.0 object library
是因为OFFICE版本问题吗?
另外问下zzxap你怎么还用到smtp服务器了?
ws_hgo 2009-04-08
  • 打赏
  • 举报
回复
//判断是否连通邮件服务商 
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("当前邮件发送为关闭状态");
}
}
zzxap 2009-04-08
  • 打赏
  • 举报
回复
[code=C#]
//用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!"); }

}
[/CODE]
zzxap 2009-04-08
  • 打赏
  • 举报
回复
在html里面直接使用下面的语句!
mailto:yourmail@yourcompany.com
<a href=mailto:mail@mail.com?subject=主题&bc=xx&cc=yy&body=something>mailto</a>

himoggy 2009-04-08
  • 打赏
  • 举报
回复
那感觉还是2楼的方法好
而且,office组件调用一般都可以设为不显示界面的

http://msdn.microsoft.com/zh-cn/library/ms268749(VS.80).aspx
msdn示例
love41349279 2009-04-08
  • 打赏
  • 举报
回复
呵呵,我是要在C/S下实现
himoggy 2009-04-08
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 benjamin_liu 的回复:]
理论上是不可以的,因为那是黑客行为.我打开你的网页的时候你偷偷用我的outlook发邮件我会同意吗?
但实际上以前的一些病毒利用IE的漏洞确实是这么发邮件的,你可以找那些染过病毒的网页看看源代码就行了,估计在现在的浏览器里行不通了.

你可以在客户端用脚本创建outlook组件发送邮件,但前题是你的应用的地址被设为受信任站点.

你们经理肯定想干坏事,告诉他这行不通.另外楼主别忘了给我加分,如果你找到了解决方案我送100分…
[/Quote]

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



LightColors 2009-04-08
  • 打赏
  • 举报
回复
就算OUTLOOK也要SMTP服务器啊。。。除非你的OUTLOOK已经配置好了。。。

如果不要SMTP,那你这个东西放到OUTLOOK没配置的机器一样没用,比如我从来不用OUTLOOK
love41349279 2009-04-08
  • 打赏
  • 举报
回复
你都0分给你也没用呀
sjlianan 2009-04-08
  • 打赏
  • 举报
回复
上网搜一下 有的
专业二三维GIS 2009-04-08
  • 打赏
  • 举报
回复
理论上是不可以的,因为那是黑客行为.我打开你的网页的时候你偷偷用我的outlook发邮件我会同意吗?
但实际上以前的一些病毒利用IE的漏洞确实是这么发邮件的,你可以找那些染过病毒的网页看看源代码就行了,估计在现在的浏览器里行不通了.

你可以在客户端用脚本创建outlook组件发送邮件,但前题是你的应用的地址被设为受信任站点.

你们经理肯定想干坏事,告诉他这行不通.另外楼主别忘了给我加分,如果你找到了解决方案我送100分给你.
love41349279 2009-04-08
  • 打赏
  • 举报
回复
我调用outlook发邮件,它会提示程序是病毒,询问是否继续发送,发送成功后,接收邮件没有附件
专业二三维GIS 2009-04-08
  • 打赏
  • 举报
回复
理论上是不可以的,因为那是黑客行为.
但实际上以前的一些病毒利用IE的漏洞确实是这么发邮件的,你可以找那些染过病毒的网页看看源代码就行了,估计在现在的浏览器里行不通了.
love41349279 2009-04-08
  • 打赏
  • 举报
回复
有附件,弄错鸟
加载更多回复(6)

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧