设为首页 收藏本站
查看: 819|回复: 0

[经验分享] SharePoint 中调用传出电子邮件中的邮件服务器及地址发送邮件

[复制链接]
发表于 2015-9-26 09:54:13 | 显示全部楼层 |阅读模式
  也许我们习惯用通过使用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、自动将列表项的附件作为邮件附件发送。
特别注意的是,虽然我此处是写的一个列表事件处理程序,但是,邮件的发送方法以及传出电子邮件设置的获取是通过型的。
  运行通过的代码:
  

  1 DSC0000.gif using System;
  2using System.Collections.Generic;
  3using System.Text;
  4using System.IO;
  5using Microsoft.SharePoint;
  6using Microsoft.SharePoint.Utilities;
  7using System.Net.Mail;
  8namespace ListMailEvent
  9 DSC0001.gif DSC0002.gif DSC0003.gif {
10 DSC0004.gif DSC0005.gif     /**//// <summary>
11 DSC0006.gif     /// SharePoint 邮件发送示例程序
12    ///  www.cnblogs.com/mcjeremy
13 DSC0007.gif     /// </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;
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 DSC0008.gif }
142  
  
  以上代码,纯属原创。
欢迎转载,但请注明出处:http://www.cnblogs.com/mcjeremy

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-118960-1-1.html 上篇帖子: 一步一步SharePoint 2007之二十七:编写两个WebPart的联动 下篇帖子: 一步一步SharePoint 2007之二十六:编写一个带事件的WebPart
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表