日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【helpdesk】启明星helpdesk7.0版本里,实现邮件提交功能介绍和原理

發布時間:2024/1/17 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【helpdesk】启明星helpdesk7.0版本里,实现邮件提交功能介绍和原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

在啟明星helpdesk7.0版本里,新增了一個功能:郵件提交。所謂郵件提交就是用戶直接發送郵件到IT。當然IT通常會公開一個公共郵件,例如support@dotnetcms.org.下面介紹一下啟明星Helpdesk郵件提交的功能介紹,稍后介紹實現原理。

1.用戶通過郵件發送郵件到 test@dotnetcms.org 提交問題。

?

2.系統接收到郵件后,將會自動發出一封回復?;貜偷臅r間間隔最長10分鐘。郵件會提醒用戶您的郵件已經收到。用戶可以直接回復郵件點擊鏈接查看問題或補充。

?

3.管理員/用戶也可以通過helpdesk直接回復,這些回復會以郵件的形式告訴給用戶。

4.用戶也可以通過helpdesk查看提交的問題。

?

?

技術實現:

在整個郵件提交過程中,核心部分是郵件的接收和發送。目前幾乎所有郵件都支持SMTP/POP協議。所有使用這個協議就可以獲取或者發送郵件。

另外,在我們實現的過程中,部分企業使用的是Exchange2007.對于微軟這個郵件服務器,許多企業默認是不啟用SMTP/POP協議,微軟使用的Exchange

web service(EWS)接口發送或者接收郵件,所以我們提供了兩種方式:SMTP/POP方式和EWS方式。

(注:對于Exchange2003,微軟還支持webdav方式,但是在exchange2007不推薦使用該方式。所以我們沒有再考慮exchange2003情況,如果您使用的是exchange2003,可以開啟SMTP/POP協議)

SMTP發送郵件核心代碼:

?

SmtpClient smtpClient = new SmtpClient();MailMessage message = new MailMessage();MailAddress fromAddress = new MailAddress(mail, friendlyname);smtpClient.Host = smtp;smtpClient.Port = int.Parse(smtp_port);NetworkCredential nc = new NetworkCredential(username, password);smtpClient.UseDefaultCredentials = false;smtpClient.Credentials = nc;smtpClient.EnableSsl = smtp_use_ssl;message.From = fromAddress;if (email != ""){message.To.Add(_email);}if (_sendto != ""){message.CC.Add(_sendto);}message.Subject = title;message.IsBodyHtml = true;message.Body = content;smtpClient.Send(message);

?

SMTP接收郵件

接收郵件使用了OpenPOP.dll

http://files.cnblogs.com/mqingqing123/OpenPop.rar

using (Pop3Client client = new Pop3Client()){client.Connect(pop, int.Parse(pop_port), pop_use_ssl);client.Authenticate(username, password);int messageCount = client.GetMessageCount();List<OpenPop.Mime.Message> allMessages;if (messageCount > maxcount){allMessages = new List<OpenPop.Mime.Message>(maxcount);Max = maxcount;}else{allMessages = new List<OpenPop.Mime.Message>(messageCount);Max = messageCount;}

?處理郵件的代碼

public static void ProcessEmail(OpenPop.Mime.Message msg, DateTime baseTime){email = msg.Headers.From.Address;createdate = msg.Headers.DateSent.AddHours(timezone);title = msg.Headers.Subject;MessagePart html = msg.FindFirstHtmlVersion();if (html != null){contents = html.GetBodyAsText();}}

?

?

?

采用EWS方式:

public static void GetOutlookEmail(){DateTime basicTime = DateTime.Now.AddMinutes(-10);string username = Helper.GetWebconfig("username");string password = Helper.GetWebconfig("password");string domain = Helper.GetWebconfig("domain");string url = Helper.GetWebconfig("exchangewebservice");int timezone = int.Parse(Helper.GetWebconfig("timezone"));int maxcount = int.Parse(Helper.GetWebconfig("every_time_fetch_max_count"));ExchangeServiceBinding esb = new ExchangeServiceBinding();esb.Credentials = new NetworkCredential(username, password, domain);esb.Url = url;FindItemType findItemRequest = new FindItemType();findItemRequest.Traversal = ItemQueryTraversalType.Shallow;ItemResponseShapeType itemProperties = new ItemResponseShapeType();獲取郵件地址PathToExtendedFieldType PidTagSenderSmtpAddress = new PathToExtendedFieldType();PidTagSenderSmtpAddress.PropertyTag = "0x5D01";PidTagSenderSmtpAddress.PropertyType = MapiPropertyTypeType.String;// Define which item properties are returned in the responseitemProperties.BaseShape = DefaultShapeNamesType.AllProperties;findItemRequest.ItemShape = itemProperties; // Add properties shape to requestitemProperties.AdditionalProperties = new BasePathToElementType[1];itemProperties.AdditionalProperties[0] = PidTagSenderSmtpAddress;// Identify which folders to search to find itemsDistinguishedFolderIdType[] folderIDArray = new DistinguishedFolderIdType[1];folderIDArray[0] = new DistinguishedFolderIdType();folderIDArray[0].Id = DistinguishedFolderIdNameType.inbox;// Add folders to requestfindItemRequest.ParentFolderIds = folderIDArray;//Create unread only restriction --------------------------RestrictionType restriction = new RestrictionType();IsEqualToType isEqualTo = new IsEqualToType();PathToUnindexedFieldType pathToFieldType = new PathToUnindexedFieldType();pathToFieldType.FieldURI = UnindexedFieldURIType.messageIsRead;FieldURIOrConstantType constantType = new FieldURIOrConstantType();ConstantValueType constantValueType = new ConstantValueType();constantValueType.Value = "0";constantType.Item = constantValueType;isEqualTo.Item = pathToFieldType;isEqualTo.FieldURIOrConstant = constantType;restriction.Item = isEqualTo;findItemRequest.Restriction = restriction;FindItemResponseType findItemResponse = esb.FindItem(findItemRequest);FindItemResponseMessageType folder = (FindItemResponseMessageType)findItemResponse.ResponseMessages.Items[0];ArrayOfRealItemsType folderContents = new ArrayOfRealItemsType();folderContents = (ArrayOfRealItemsType)folder.RootFolder.Item;ItemType[] items = folderContents.Items;int count = items.Length;int Max = 0;if (count > maxcount){Max=maxcount;}else{Max = count;}int c = 0;for (int i = Max; c < Max; i--){try{ProcessEmail(items[i-1], basicTime);}catch(Exception ex){WriteLog(ex.ToString());}c++;}}

?最后處理獲取的郵件

// 獲取郵件的內容 //GetItemType g = new GetItemType(); g.ItemShape = new ItemResponseShapeType(); g.ItemShape.BaseShape = DefaultShapeNamesType.AllProperties;g.ItemIds = new BaseItemIdType[] { itemType.ItemId }; GetItemResponseType p_mailResponse = esb.GetItem(g); ArrayOfResponseMessagesType arrMail = p_mailResponse.ResponseMessages; ResponseMessageType[] responseMessages = arrMail.Items;foreach (ResponseMessageType respmsg in responseMessages){if (respmsg is ItemInfoResponseMessageType){ItemInfoResponseMessageType createItemResp = (respmsg as ItemInfoResponseMessageType);ArrayOfRealItemsType aorit = createItemResp.Items;foreach (MessageType myMessage in aorit.Items){if (myMessage.Body.BodyType1 == BodyTypeType.Text){contents = myMessage.Body.Value.Replace(Environment.NewLine, "<br />");}else{contents = myMessage.Body.Value;}if (myMessage.From != null){email = myMessage.From.Item.EmailAddress;}}}}

?采用EWS發送郵件的核心代碼

emailMessage.Subject = title; emailMessage.Body = new BodyType(); emailMessage.Body.BodyType1 = BodyTypeType.HTML; //specify HTML or plain emailMessage.Body.Value = contents;CreateItemType emailToSave = new CreateItemType(); emailToSave.Items = new NonEmptyArrayOfAllItemsType(); emailToSave.Items.Items = new ItemType[1]; emailToSave.Items.Items[0] = emailMessage; emailToSave.MessageDisposition = MessageDispositionType.SendAndSaveCopy; emailToSave.MessageDispositionSpecified = true;try{CreateItemResponseType response = esb.CreateItem(emailToSave);ResponseMessageType[] rmta = response.ResponseMessages.Items;}catch(Exception ex){WriteLog(ex.ToString()); }

?

轉載于:https://www.cnblogs.com/mqingqing123/archive/2013/01/14/2859173.html

總結

以上是生活随笔為你收集整理的【helpdesk】启明星helpdesk7.0版本里,实现邮件提交功能介绍和原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。