EWS 获取附件和纯文本正文 C#
EWS Get Attachments and plain text body C#
我正在编写一个服务台应用程序,用户可以使用电子邮件记录工单,所以我使用 EWS API 来接收电子邮件并将主题行和正文以纯文本形式存储到数据库中.
我也想存储附件,但我遇到了麻烦,因为 BodyType 不能是文本,它必须是 HTML 才能允许存储附件,但我要求存储时正文是纯文本它到数据库。
我从这个link EWS body plain text 得到了存储纯文本的代码。我似乎找不到任何关于附件的有趣信息。
到目前为止我的代码:
itempropertyset.RequestedBodyType = BodyType.Text;
email.Load();
bb = email.Body.Text;
try
{// Add The new ticket to the DB
string stmt = "INSERT INTO Tickets(Subject, StatusId, PriorityId, CreatedByUserId, CreatedDateTime, ClientDescription, TicketTypeId) VALUES (@Subject, @sId, @pId, @cId, @ctd, @cd, @tId); Select SCOPE_IDENTITY() as Id";
cmd = new SqlCommand(stmt, conn);
cmd.Parameters.AddWithValue("@Subject", ss); //Subject Line from email
cmd.Parameters.AddWithValue("@sId", 1); //Default to Open
cmd.Parameters.AddWithValue("@pId", 6); //Default Prioirity to Normal
cmd.Parameters.AddWithValue("@cId", UserId); //GetTheUserId
cmd.Parameters.AddWithValue("@ctd", DateTime.Now);
cmd.Parameters.AddWithValue("@cd", bb); //Subject Line from email
cmd.Parameters.AddWithValue("@sId", 2); //Default to Email
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dte = new DataTable("res");
da.Fill(dte);
if (dte.Rows.Count > 0)
{
decimal tId = Convert.ToDecimal(dte.Rows[0]["Id"]);
try
{ //Add the new activity for the ticket
string stmnt = "INSERT INTO Activities(TicketId, ActivityTypeId, CreatedByUserId, Subject, ActivityContent, CreatedDateTime) VALUES (@tId, @atId, @cId, @Subject, @ac, @ctd ); Select SCOPE_IDENTITY() as Id";;
SqlCommand cmde = new SqlCommand(stmnt, conn);
cmde.Parameters.AddWithValue("@tId", tId); //Subject Line from email
cmde.Parameters.AddWithValue("@atId", 3); //Default to Email
cmde.Parameters.AddWithValue("@cId", UserId); //GetTheUserId
cmde.Parameters.AddWithValue("@Subject", ss);
cmde.Parameters.AddWithValue("@ac", bb);
cmde.Parameters.AddWithValue("@ctd", DateTime.Now);
SqlDataAdapter sdtc = new SqlDataAdapter(cmde);
DataTable sdta = new DataTable("ActivityTable");
sdtc.Fill(sdta);
if (sdta.Rows.Count > 0 && email.HasAttachments == true)
{
decimal aId = Convert.ToDecimal(sdta.Rows[0]["Id"]);
foreach(Microsoft.Exchange.WebServices.Data.Attachment attachment in email.Attachments)
{
if (attachment is FileAttachment)
{
fileAttachment = attachment as FileAttachment;
fileAttachment.Load("\\Helpdesk\Attachments\" + attachment.Name);
}
else
{
ItemAttachment itemAttachment = attachment as ItemAttachment;
itemAttachment.Load();
}
string path = "\\Helpdesk\Attachments\" + attachment.Name;
string stmtattach = "INSERT INTO Attachment(TicketId, ActivityId, AttachmentTypeId, CreatedByUserId, CreatedDateTime, AttachmentPath) VALUES (@tId, @aId, @atId, @cId, @cdt, @path)";
SqlCommand comd = new SqlCommand(stmtattach, conn);
comd.Parameters.AddWithValue("@tId", tId);
comd.Parameters.AddWithValue("@aId", aId);
comd.Parameters.AddWithValue("@atId", 1);
comd.Parameters.AddWithValue("@cId", UserId);
comd.Parameters.AddWithValue("@cdt", DateTime.Now);
comd.Parameters.AddWithValue("@path", path);
SqlDataAdapter ada = new SqlDataAdapter(comd);
DataTable adte = new DataTable("attachment");
ada.Fill(adte);
}
}
SendMail(senderName, email.Sender.Address, "TICKET?" + tId.ToString() + "#" + ss, "Original Message: " + bb + "Your Ticket has successfully been added to the helpdesk your ticket is " + tId);
}
catch (System.Exception ex)
{
Console.WriteLine(ex);
lg.AppendLine(" - Unsuccessful adding activity to DB.<br/>");
}
}
}
如果我对你的问题理解正确,你想获取附件的正文。
为此,您需要使用 Item.TextBody 属性。
所以像下面这样:
ItemAttachment itemAttachment = attachment as ItemAttachment;
itemAttachment.Load(new PropertySet(EmailMessageSchema.TextBody));
Console.WriteLine(itemAttachment.Item.TextBody);
我正在编写一个服务台应用程序,用户可以使用电子邮件记录工单,所以我使用 EWS API 来接收电子邮件并将主题行和正文以纯文本形式存储到数据库中.
我也想存储附件,但我遇到了麻烦,因为 BodyType 不能是文本,它必须是 HTML 才能允许存储附件,但我要求存储时正文是纯文本它到数据库。
我从这个link EWS body plain text 得到了存储纯文本的代码。我似乎找不到任何关于附件的有趣信息。
到目前为止我的代码:
itempropertyset.RequestedBodyType = BodyType.Text;
email.Load();
bb = email.Body.Text;
try
{// Add The new ticket to the DB
string stmt = "INSERT INTO Tickets(Subject, StatusId, PriorityId, CreatedByUserId, CreatedDateTime, ClientDescription, TicketTypeId) VALUES (@Subject, @sId, @pId, @cId, @ctd, @cd, @tId); Select SCOPE_IDENTITY() as Id";
cmd = new SqlCommand(stmt, conn);
cmd.Parameters.AddWithValue("@Subject", ss); //Subject Line from email
cmd.Parameters.AddWithValue("@sId", 1); //Default to Open
cmd.Parameters.AddWithValue("@pId", 6); //Default Prioirity to Normal
cmd.Parameters.AddWithValue("@cId", UserId); //GetTheUserId
cmd.Parameters.AddWithValue("@ctd", DateTime.Now);
cmd.Parameters.AddWithValue("@cd", bb); //Subject Line from email
cmd.Parameters.AddWithValue("@sId", 2); //Default to Email
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dte = new DataTable("res");
da.Fill(dte);
if (dte.Rows.Count > 0)
{
decimal tId = Convert.ToDecimal(dte.Rows[0]["Id"]);
try
{ //Add the new activity for the ticket
string stmnt = "INSERT INTO Activities(TicketId, ActivityTypeId, CreatedByUserId, Subject, ActivityContent, CreatedDateTime) VALUES (@tId, @atId, @cId, @Subject, @ac, @ctd ); Select SCOPE_IDENTITY() as Id";;
SqlCommand cmde = new SqlCommand(stmnt, conn);
cmde.Parameters.AddWithValue("@tId", tId); //Subject Line from email
cmde.Parameters.AddWithValue("@atId", 3); //Default to Email
cmde.Parameters.AddWithValue("@cId", UserId); //GetTheUserId
cmde.Parameters.AddWithValue("@Subject", ss);
cmde.Parameters.AddWithValue("@ac", bb);
cmde.Parameters.AddWithValue("@ctd", DateTime.Now);
SqlDataAdapter sdtc = new SqlDataAdapter(cmde);
DataTable sdta = new DataTable("ActivityTable");
sdtc.Fill(sdta);
if (sdta.Rows.Count > 0 && email.HasAttachments == true)
{
decimal aId = Convert.ToDecimal(sdta.Rows[0]["Id"]);
foreach(Microsoft.Exchange.WebServices.Data.Attachment attachment in email.Attachments)
{
if (attachment is FileAttachment)
{
fileAttachment = attachment as FileAttachment;
fileAttachment.Load("\\Helpdesk\Attachments\" + attachment.Name);
}
else
{
ItemAttachment itemAttachment = attachment as ItemAttachment;
itemAttachment.Load();
}
string path = "\\Helpdesk\Attachments\" + attachment.Name;
string stmtattach = "INSERT INTO Attachment(TicketId, ActivityId, AttachmentTypeId, CreatedByUserId, CreatedDateTime, AttachmentPath) VALUES (@tId, @aId, @atId, @cId, @cdt, @path)";
SqlCommand comd = new SqlCommand(stmtattach, conn);
comd.Parameters.AddWithValue("@tId", tId);
comd.Parameters.AddWithValue("@aId", aId);
comd.Parameters.AddWithValue("@atId", 1);
comd.Parameters.AddWithValue("@cId", UserId);
comd.Parameters.AddWithValue("@cdt", DateTime.Now);
comd.Parameters.AddWithValue("@path", path);
SqlDataAdapter ada = new SqlDataAdapter(comd);
DataTable adte = new DataTable("attachment");
ada.Fill(adte);
}
}
SendMail(senderName, email.Sender.Address, "TICKET?" + tId.ToString() + "#" + ss, "Original Message: " + bb + "Your Ticket has successfully been added to the helpdesk your ticket is " + tId);
}
catch (System.Exception ex)
{
Console.WriteLine(ex);
lg.AppendLine(" - Unsuccessful adding activity to DB.<br/>");
}
}
}
如果我对你的问题理解正确,你想获取附件的正文。
为此,您需要使用 Item.TextBody 属性。
所以像下面这样:
ItemAttachment itemAttachment = attachment as ItemAttachment;
itemAttachment.Load(new PropertySet(EmailMessageSchema.TextBody));
Console.WriteLine(itemAttachment.Item.TextBody);