SharePoint 中调用传出电子邮件中的邮件服务器及地址发送邮件
来源:互联网 发布:pplive网络电视下载 编辑:程序博客网 时间:2024/06/07 02:55
也许我们习惯用通过使用System.Net.Mail中的相关类进行邮件的发送。
这其中,需要我们手动指定邮件服务器、发件人地址进行邮件的发送。
而在SharePoint中,这些东西都可以通过应用程序》传出电子邮件来进行设置。那么,如果我们要将.Net.Mail与SharePoint结合起来,该怎么做呢?
关键就在于,如何通过SP的对象模型获取到设置的服务器、地址等数据,下面是我一些小的总结,希望能对大家有所帮助:
//第一步:获取应用程序,因为 传出电子邮件设置是在应用程序中进行的 site.WebApplication
Microsoft.SharePoint.Administration.SPWebApplication webApp = site.WebApplication;
//第二步:获取邮件服务器主机名 webApp.OutboundMailServiceInstance.Server.Name
client.Host = webApp.OutboundMailServiceInstance.Server.Name;
//第三步:获取发送人地址:webApp.OutboundMailSenderAddress;
//第四步:获取邮件编码 :
message.BodyEncoding = System.Text.Encoding.GetEncoding(webApp.OutboundMailCodePage);
----在我目前的工作中,碰到这样一个场景:在某个列表中添加一项列表项后,自动获取列表中的“收件人”和“发件人”字段进行邮件发送。
因此,我写了如下的测试代码,
该测试代码实现:
1、选择列表项字段“收件人”作为邮件收件人,选择列表项字段“抄送发”作为邮件抄送人,值得一提的是,在SP中,这2个被设置成“用户或用户组”后,还可以选择组进行发送目标,这一个非常爽。
2、自动将列表项的附件作为邮件附件发送。
特别注意的是,虽然我此处是写的一个列表事件处理程序,但是,邮件的发送方法以及传出电子邮件设置的获取是通过型的。
运行通过的代码:
2using System.Collections.Generic;
3using System.Text;
4using System.IO;
5using Microsoft.SharePoint;
6using Microsoft.SharePoint.Utilities;
7using System.Net.Mail;
8namespace ListMailEvent
9{
10 /// <summary>
11 /// SharePoint 邮件发送示例程序
12 /// www.cnblogs.com/mcjeremy
13 /// </summary>
14 public class ListMailEvent: SPItemEventReceiver
15 {
16
17 public override void ItemAdded(SPItemEventProperties properties)
18 {
19 //邮件主题
20 string mailSubject = string.Empty;
21 //邮件正文
22 string mailBody = string.Empty;
23
24 using (SPSite site = new SPSite(properties.SiteId))
25 {
26 using (SPWeb web = site.OpenWeb(site.OpenWeb().ID))
27 {
28 List<string> userEmails = new List<string>(); //收件人
29 List<string> choiceUserEmails = new List<string>(); //抄送人
30 try
31 {
32 SPList meetingList = web.Lists[properties.ListId];
33 SPListItem meetingItem = meetingList.GetItemById(properties.ListItemId);
34 if (null != meetingItem["收件人"])
35 {
36 SPFieldUserValueCollection values = meetingItem["收件人"] as SPFieldUserValueCollection;
37 GetUsersFromUserField(web, userEmails, values);
38 }
39 if (null != meetingItem["抄送人"])
40 {
41 SPFieldUserValueCollection values_options = meetingItem["抄送人"] as SPFieldUserValueCollection;
42 GetUsersFromUserField(web, choiceUserEmails, values_options);
43 }
44 if (userEmails.Count <= 0)
45 return;
46 mailBody="<h1>这是测试的正文</h1>";
47 mailSubject="测试邮件"
48 SendMail(mailSubject, mailBody, userEmails, choiceUserEmails,site, web, meetingItem);
49
50 }
51 catch(Exception eee)
52 {
53 return;
54 }
55 }
56 }
57 }
58 public void GetUsersFromUserField(SPWeb web, List<string> userEmails, SPFieldUserValueCollection values)
59 {
60 if (values.Count <= 0 || null==values)
61 return;
62 foreach (SPFieldUserValue userValue in values)
63 {
64 try
65 {
66 if (userValue.User != null)
67 {
68 userEmails.Add(userValue.User.Email);
69 }
70 else
71 {
72 //可以选择用户组进行发送
73 SPGroup group = web.SiteGroups.GetByID(userValue.LookupId);
74 foreach (SPUser user in group.Users)
75 {
76 userEmails.Add(user.Email);
77 }
78 }
79 }
80 catch
81 {
82 continue;
83 }
84 }
85 }
86 public void SendMail(string Title, string Body, List<string> userEmails, List<string> choiceUserEmails,SPSite site, SPWeb web, SPListItem item)
87 {
88 //获取应用程序,因为 传出电子邮件设置是在应用程序中进行的 site.WebApplication
89 Microsoft.SharePoint.Administration.SPWebApplication webApp = site.WebApplication;
90 System.Net.Mail.SmtpClient client = new SmtpClient();
91 //获取邮件服务器主机名 webApp.OutboundMailServiceInstance.Server.Name
92 client.Host = webApp.OutboundMailServiceInstance.Server.Name;
93 //设置Credentials
94 client.UseDefaultCredentials = true;
95 client.DeliveryMethod = SmtpDeliveryMethod.Network;
96
97 //获取发件人邮件地址 webApp.OutboundMailSenderAddress
98 string senderName = webApp.OutboundMailSenderAddress;
99
100 System.Net.Mail.MailMessage message = new MailMessage();
101 message.From=new MailAddress(senderName);
102 /*添加收件人*/
103 foreach(string userEmail in userEmails)
104 {
105 message.To.Add(userEmail);
106 }
107 /*添加抄送,达到可选效果*/
108 foreach(string userEmail in choiceUserEmails)
109 {
110 message.CC.Add(userEmail);
111 }
112 message.Subject = Title;
113 message.Body = Body;
114 try
115 {
116 //获取传出电子邮件地址中的邮件编码 webApp.OutboundMailCodePage
117 message.BodyEncoding = System.Text.Encoding.GetEncoding(webApp.OutboundMailCodePage);
118 }
119 catch (System.Exception ex) { } message.IsBodyHtml = true;
120//获取列表项的附件作为邮件附件一起发送
121 if(item.Attachments.Count>0)
122 {
123 SPAttachmentCollection attaches = item.Attachments;
124 for (int i = 0; i < attaches.Count; i++)
125 {
126 string url = attaches.UrlPrefix + attaches[i];
127 SPFile file = web.GetFile(url);
128 Attachment mailAttach = new Attachment(file.OpenBinaryStream(),System.Net.Mime.MediaTypeNames.Application.Octet);
129 System.Net.Mime.ContentDisposition cd = mailAttach.ContentDisposition;
130 cd.FileName = file.Name; //记得此处
131 message.Attachments.Add(mailAttach);
132 }
133 }
134 try
135 {
136 client.Send(message);
137 }
138 catch (Exception ex) { }
139 }
140 }
141}
142
以上代码,纯属原创。
欢迎转载,但请注明出处:http://www.cnblogs.com/mcjeremy
- SharePoint 中调用传出电子邮件中的邮件服务器及地址发送邮件
- SharePoint 中调用传出电子邮件中的邮件服务器及地址发送邮件
- SharePoint 传出邮件设置
- 在VC中调用默认的电子邮件程序发送邮件
- 在VC中调用默认的电子邮件程序发送邮件
- 在VC中调用默认的电子邮件程序发送邮件
- Sharepoint 发送邮件
- 邮件服务器发送测试电子邮件消息: 出现未知错误
- Android中调用发送邮件
- 为 SharePoint 2013 服务器场配置传出电子邮件
- SharePoint 发送邮件之 Windows 2012 配置SMTP服务器及测试代码
- Java远程调用邮件服务器,实现邮件发送
- Java远程调用邮件服务器,实现邮件发送
- Java远程调用邮件服务器,实现邮件发送
- 配置 Sharepoint传入/传出电子邮件
- C#发送邮件程序 及测试邮件服务器
- C#发送邮件程序 及测试邮件服务器
- C#发送邮件程序 及测试邮件服务器
- 第二章 商场促销--策略模式
- Win XP系统无法关机时如何强制软关机
- MOSS ad组的获取及Hashtable作缓存总结
- MOSS new SPSite时报应用程序错误的解决
- SharePoint阻止字段更新后引发相关事件
- SharePoint 中调用传出电子邮件中的邮件服务器及地址发送邮件
- B树的定义
- 如何设置感光度、快门、光圈,控制光线?
- Oracle经典书籍
- 用GTK编写GUI程序
- Object-C KVC & KVO
- GTK+学习:概述 、搭建环境(Windows,Linux)、开发 收藏
- Android opengl 学习
- 一个Java程序员应该掌握的10项技能