c#代码怎么通过outlook发邮件

当系统出现某个条件,怎样让系统自动派信给系统管理员?举例:某个报修系统用户报修后超过一定时间管理员未处理则系统自动发mail提醒管理员(用的是outlook)...有这方面经验的朋友请指点下.
发送邮件到企业邮箱系统(通过outlook收发的)

c#在使用outlook提供的一些API时,需要将outlook相关的com引用到项目中。 具体方法就是用vs打开工程后,在工程上添加引用,在com选项卡上,选择Microsoft Outlook 12.0 Object Library,如果安装的不是outlook2007,则对应com的版本不一样。注意下面描述的方法是在命令行模式或者winform模式下的,不是web模式下的。
1.给outlook添加任务,代码如下:
/// <summary>
/// 给outlook添加一个新的任务
/// </summary>
/// <param name="subject">新任务标题</param>
/// <param name="body">新任务正文</param>
/// <param name="dueDate">新任务到期时间</param>
/// <param name="importance">新任务优先级</param>
public static void AddNewTask(string subject, string body, DateTime dueDate, OlImportance importance)
{
try
{
Application outLookApp = new Application();
TaskItem newTask = (TaskItem)outLookApp.CreateItem(OlItemType.olTaskItem);
newTask.Body = body;
newTask.Subject = subject;
newTask.Importance = importance;
newTask.DueDate = dueDate;
newTask.Save();
}
catch(System.Exception e)
{
throw e;
}
}
2.最简单的发送邮件。
下面是一个最简单的发送邮件的例子,在该例子中,只能给一个邮箱地址发邮件,而且还不能够添加附件。代码如下:

/// <summary>
/// 一个最简单的发送邮件的例子。同步方式。只支持发送到一个地址,而且没有附件。
/// </summary>
/// <param name="server">smtp服务器地址</param>
/// <param name="from">发送者邮箱</param>
/// <param name="to">接收者邮箱</param>
/// <param name="subject">主题</param>
/// <param name="body">正文</param>
/// <param name="isHtml">正文是否以html形式展现</param>
public static void SimpleSeedMail(string server, string from, string to, string subject, string body, bool isHtml)
{
try
{
MailMessage message = new MailMessage(from, to, subject, body);
message.IsBodyHtml = isHtml;
SmtpClient client = new SmtpClient(server);
client.Credentials = new NetworkCredential("发送者邮箱用户名(即@前面的东东)","发送者邮箱密码");
client.Send(message);
}
catch (System.Exception e)
{
throw e;
}
}
3.向多人发邮件,并支持发送多个附件。
代码如下:

/// <summary>
/// 支持向多人发邮件,并支持多个附件的一个发送邮件的例子。
/// </summary>
/// <param name="server">smtp服务器地址</param>
/// <param name="from">发送者邮箱</param>
/// <param name="to">接收者邮箱,多个接收者以;隔开</param>
/// <param name="subject">邮件主题</param>
/// <param name="body">邮件正文</param>
/// <param name="mailAttach">附件</param>
/// <param name="isHtml">邮件正文是否需要以html的方式展现</param>
public static void MultiSendEmail(string server, string from, string to, string subject, string body, ArrayList mailAttach, bool isHtml)
{
MailMessage eMail = new MailMessage();
SmtpClient eClient = new SmtpClient(server);
eClient.Credentials = new NetworkCredential("发送者邮箱用户名(即@前面的东东)", "发送者邮箱密码");

eMail.Subject = subject;
eMail.SubjectEncoding = Encoding.UTF8;

eMail.Body = body;
eMail.BodyEncoding = Encoding.UTF8;

eMail.From = new MailAddress(from);

string[] arrMailAddr;

try
{
#region 添加多个收件人
eMail.To.Clear();
if (!string.IsNullOrEmpty(to))
{
arrMailAddr = to.Split(';');
foreach (string strTo in arrMailAddr)
{
if (!string.IsNullOrEmpty(strTo))
{
eMail.To.Add(strTo);
}
}
}
#endregion
#region 添加多个附件
eMail.Attachments.Clear();
if (mailAttach != null)
{
for (int i = 0; i < mailAttach.Count; i++)
{
if (!string.IsNullOrEmpty(mailAttach[i].ToString()))
{
eMail.Attachments.Add(new System.Net.Mail.Attachment(mailAttach[i].ToString()));
}
}
}
#endregion
#region 发送邮件
eClient.Send(eMail);
#endregion
}
catch (System.Exception e)
{
throw e;
}

}//end of method
4.异步发送邮件的一个例子。以163的smtp服务器为例。
代码如下:

using System;
using System.Net;
using System.Net.Mail;
using System.Net.Mime;
using System.Threading;
using System.ComponentModel;
namespace Examples.SmptExamples.Async
{
public class SimpleAsynchronousExample
{
static bool mailSent = false;

private static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
{
// Get the unique identifier for this asynchronous operation.
String token = (string)e.UserState;

if (e.Cancelled)
{
Console.WriteLine("[{0}] Send canceled.", token);
}
if (e.Error != null)
{
Console.WriteLine("[{0}] {1}", token, e.Error.ToString());
}
else
{
Console.WriteLine("Message sent.");
}
mailSent = true;
}

public static void Main(string[] args)
{
SmtpClient client = new SmtpClient("smtp.163.com");
client.Credentials = client.Credentials = new NetworkCredential("发送者邮箱用户名", "发送者邮箱密码");

MailAddress from = new MailAddress("softwarezxj@163.com");
MailAddress to = new MailAddress("lastBeachhead@gmail.com");
MailMessage message = new MailMessage(from, to);
message.Body = "这是一封测试异步发送邮件的邮件 ";
message.BodyEncoding = System.Text.Encoding.UTF8;
message.Subject = "测试异步发邮件";
message.SubjectEncoding = System.Text.Encoding.UTF8;

// 设置回调函数
client.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback);
// SendAsync方法的第二个参数可以是任何对象,这里使用一个字符串标识本次发送
//传入的该对象可以在邮件发送结束触发的回调函数中访问到。
string userState = "test message1";
client.SendAsync(message, userState);
Console.WriteLine("Sending message... press c to cancel mail. Press any other key to exit.");
string answer = Console.ReadLine();

if (answer.StartsWith("c") && mailSent == false)
{
client.SendAsyncCancel();
}
//清理工作
message.Dispose();
Console.WriteLine("Goodbye.");
Console.ReadLine();
}
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-03-08
给你一段代码来发邮件吧。

string UserName="你的邮件账户";
string Password="@@@@@";
string MailServer="smtp.sina.com.cn";
int smtpPort=25;
System.Net.Mail.SmtpClient sc = new SmtpClient(MailServer, smtpPort);
NetworkCredential nc = new NetworkCredential(UserName, Password);
sc.Credentials = nc;

MailMessage MyEmailMessage=new MailMessage();
MyEmailMessage.From = new MailAddress(UserName);
MyEmailMessage.To.Add(new MailAddress("aldsja@sina.com.cn"));
MyEmailMessage.Subject = "邮件发送的一个简单例子";
MyEmailMessage.Body = "猫王呼叫耗子,收到请回答!!!\n";
MyEmailMessage.IsBodyHtml = false;
MyEmailMessage.Priority = MailPriority.High;
sc.Send(MyEmailMessage);//发送电子邮件
Console.WriteLine("Mail send finished.");

无论什么邮件系统,都应该支持smtp邮件协议,就可以用smtp客户端来发邮件。
需要进入的命名空间是:
using System.Net;
using System.Net.Mail;追问

有個邏輯上的斷點請教下。這個mail功能應該是在項目的代碼裏,而所有的功能都是通過頁面被瀏覽者訪問才能成功執行;假設沒人訪問(頁面代碼不被執行)mail功能怎麽通過時間判斷發信???

追答

那就需要一个触发的机制了,你看看使用定时器好还是用计划任务好。
需要定时器就用 System.Timers.Timer t1 = new System.Timers.Timer();
处理起来也简单,网上其实有大量的例子,这里写一个简单的。
//设置
t1.AutoReset = true;
t1.Interval = 600000;
t1.Start();
//设置时间到达时触发的事件
t1.Elapsed += new System.Timers.ElapsedEventHandler(t1_Elapsed);
//触发的事件
void t1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
//ToDo: 写你要的逻辑,你可以把判断时间点和发送邮件的逻辑写到里面。
}

本回答被提问者和网友采纳

c#代码怎么通过outlook发邮件
1.给outlook添加任务,代码如下:\/\/\/ \/\/\/ 给outlook添加一个新的任务 \/\/\/ \/\/\/ 新任务标题 \/\/\/ 新任务正文 \/\/\/ 新任务到期时间 \/\/\/ 新任务优先级 public static void AddNewTask(string subject, string body, DateTime dueDate, OlImportance importance){ try { Application outLookApp =...

C#中,点击链接发送邮件给指定邮箱如何实现
这有两种情况,一种是你有一个公用邮箱,比如abc@163.com 当别人点击你这个链接时你通过abc这个邮箱发送到客户指定的邮箱里 还一种情况是你没有公用邮箱,你需要借助客户自己的邮箱,这是你仅仅要做的是启动客户机上的邮箱程序然后把目标邮箱地址智能的显示在发件人中,比如outlook,至于如何发由客户操作,这...

关于c#发送邮件失败的代码 进来帮忙看看
\/\/\/ 邮件正文 \/\/\/ 邮件发送人地址。如:sender@163.com \/\/\/ 附件路径 \/\/\/ <returns><\/returns> public bool MySendMail(string mailto, string mailsubject, string mailbody, string mailFrom){ try { System.Net.Mail.MailAddress from = new System.Net.Mail.MailAddress(mailFrom);\/\/邮件...

c#mvc 怎样发送邮件控件
\/\/发送邮件所用的端口号(htmp协议默认为25) private string mSenderServerHost; \/\/发件箱的邮件服务器地址(IP形式或字符串形式均可) private string mSenderPassword; \/\/发件箱的密码 private string mSenderUsername; \/\/发件箱的用户名(即@符号前面的字符串,例如:hello@163...

c#如何读取本地通过outlook、foxmail等工具接收到本地的邮件。
using Microsoft.Exchange.WebServices.Data;

...C#获取当前outlook(包括outlook2003、2007)邮箱名
1.你的用户名肯定是跟邮箱有关联(建数据库的时候要有邮箱,邮箱smtp地址)。2.当你点击时,获取到该用户邮箱。3.找一个asp.net 发邮件的代码(网上很多例子)之后完毕……顺便给你发邮箱代码吧。(如果觉得好的话能不能给点分啊- -!)MailAttachment ma = new MailAttachment(@"e:\\dialog.js");\/...

在C#编程中选择发件人代码是什么?
发件人不是有一个from属性么?MailMessage mailMsg = new MailMessage();mailMsg.From = new MailAddress(sFrom);mailMsg.Subject = sSubject;mailMsg.Body = sBody;有from呀 然後你说权限问题,那你要用一个权限通过的帐号和密码去登陆mail服务器 SmtpClient sc = new SmtpClient();sc.Host ...

c#或者c++获取outlook邮件文件(*.pst)存放本地的路径
C#的:先得到Microsoft.Office.Interop.Outlook.Application。再获得NameSpace,再获得Accounts,找到指定的Account,看DeliveryStore属性。

C#怎么判断Outlook是否收到新邮件
方法1:打开收件箱,新收到的邮件一般会放于最顶层,字体黑色加粗,看过的邮件字体就恢复正常了。方法2:设置新邮件提醒:点击文件-选项-邮件-邮件达到通知,有以下选项可以选择:播放声音 短暂改变指针形状 在任务栏显示信封图标 显示桌面通知。

怎样做一个电子邮件接收服务器
发送邮件其实只是把信息送到 SMTP 服务器,真正的“发送”还是人家服务器做的,不是你的。如果要收邮件,也有两种情况,你是要做像 mail.163.com 这样的邮箱呢?还是只是做 Outlook 的邮件接受器。这是两码事。但无论如何,你都需要去仔细研究 POP 协议。

相似回答