使用AE.Net.Mail如何使用内嵌图像发送邮件

时间:2015-10-10 18:13:59

标签: api c#-4.0 gmail

我在.net项目中使用AE.Net.Mail。

我通过gmail api发送了html邮件和文件附件,它完美无缺。 但是我不知道用它在身体邮件中嵌入图像的方法呢? 有人帮帮我吗?

string To = txtTo.Text;
string Subject = txtEmailSubject.Text;
string Body = hdfEmailContentSend.Value;
string InputAttachmentArr = hdfInputAttachmentArr.Value;

var msg = new AE.Net.Mail.MailMessage();
msg.From = new MailAddress("haunguyen1791990@gmail.com", "=?UTF-8?B?" + EncodeTo64UTF8(User.FullName) + "?=");
msg.ReplyTo.Add(msg.From);
msg.To.Add(new MailAddress(To));
msg.Subject = "=?UTF-8?B?" + EncodeTo64UTF8(Subject) + "?=";
msg.Body = Body;
var result = SendMessage(InputAttachmentArr, msg, "");

private Google.Apis.Gmail.v1.Data.Message SendMessage(string InputAttachmentArr, AE.Net.Mail.MailMessage msg, string ThreadId) {
        try {
            bool isAttackFile = false;
            string boundary = "boundary_" + DateTime.Now.ToString("yyyyMMddHHmmss");
            var service = CRMGmailUtils.DefineServiceGet(Server.MapPath(".") + "\\client_secret.json");
            //get info file attachment
            List<string> lstAttachFile = InputAttachmentArr.Split(',').ToList();
            lstAttachFile.RemoveAll(item => item.Length == 0);

            foreach (var item in lstAttachFile) {
                string filePath = Server.MapPath("~/" + "Upload/gmail/" + item);
                var bytes = File.ReadAllBytes(filePath);
                AE.Net.Mail.Attachment file = new AE.Net.Mail.Attachment(bytes, GetMimeType(item), item, true);
                msg.Attachments.Add(file);
                isAttackFile = true;
            }

            var msgStr = new StringWriter();

            //if file attachment not exists, set type mail is html
            if (!isAttackFile) {
                msg.ContentType = "text/html";
            }

            msg.Save(msgStr);
            string data = msgStr.ToString();

            //else i customize body mail with new boundary
            if (isAttackFile) {
                string beginBody = "Content-Type: multipart/alternative; boundary=" + boundary;
                //beginBody += "\n\n--" + boundary;
                //beginBody += "\nContent-Type: text/plain; charset=UTF-8";
                //beginBody += "\n\n*2*";
                beginBody += "\n\n--" + boundary;
                beginBody += "\nContent-Type: text/html; charset=UTF-8";
                string endBody = "\n\n--" + boundary + "--";

                msg.Body += endBody;
                string parentBoundary = Regex.Match(data, @"----(.*?)--").Groups[1].Value;
                Regex rgx = new Regex("----" + parentBoundary);
                data = rgx.Replace(data, "----" + parentBoundary + "\n" + beginBody, 1);
            }

            string raw = Base64UrlEncode(data.ToString());
            var result = new Google.Apis.Gmail.v1.Data.Message();
            //case send with reply
            if (!string.IsNullOrEmpty(ThreadId)) {
                result = service.Users.Messages.Send(new Google.Apis.Gmail.v1.Data.Message { Raw = raw, ThreadId = ThreadId }, "me").Execute();
            } else {
                //case send new mail
                result = service.Users.Messages.Send(new Google.Apis.Gmail.v1.Data.Message { Raw = raw }, "me").Execute();
            }

            DeleteAttackFile(lstAttachFile);
            return result;
        } catch (Exception objEx) {
            throw objEx;
        }
    }

0 个答案:

没有答案