EWS获取附件和纯文本正文C#

时间:2017-07-28 08:33:01

标签: c# api email exchangewebservices attachment

我正在编写一个帮助台应用程序,用户可以使用电子邮件记录故障单,因此我使用EWS API来接收电子邮件并将主题行和正文以纯文本形式存储到数据库中。

我还想存储附件,但我遇到麻烦,因为BodyType不能是文本,它必须是HTML才能存储附件,但是当将它存储到数据库时我要求正文是纯文本。 / p>

我从这个链接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/>");
        }

    }
}

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,您需要获取附件的正文。

为此,您需要使用Item.TextBody属性。

如下所示:

ItemAttachment itemAttachment = attachment as ItemAttachment;

itemAttachment.Load(new PropertySet(EmailMessageSchema.TextBody));

Console.WriteLine(itemAttachment.Item.TextBody);