Exemplo n.º 1
0
        /// <summary>
        /// 发送邮件
        /// </summary>
        /// <param name="mail"></param>
        /// <returns></returns>
        public async Task<ResponseData<dynamic>> SendMailAsync(SendCloudMail mail)
        {
            if (mail == null) throw new ArgumentNullException(nameof(mail));
            if (string.IsNullOrWhiteSpace(this.Configuration.ApiUser)) throw new ArgumentNullException(nameof(this.Configuration.ApiUser));
            if (string.IsNullOrWhiteSpace(this.Configuration.ApiKey)) throw new ArgumentNullException(nameof(this.Configuration.ApiKey));
            Contract.EndContractBlock();

            mail.Validate();

            var credential = new Credential(this.Configuration.ApiUser, this.Configuration.ApiKey);
            if (mail?.Body?.Attachments?.Count == 0)
            {
                return await this.SendEmailAsync(credential, mail);
            }
            else
            {
                return await this.SendMultipartEmailAsync(credential, mail);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// multipart方式发送
        /// </summary>
        /// <param name="credential"></param>
        /// <param name="mail"></param>
        /// <returns></returns>
        protected virtual async Task<ResponseData<dynamic>> SendMultipartEmailAsync(Credential credential, SendCloudMail mail)
        {
            using (var multiPartContent = new MultipartFormDataContent())
            {
                multiPartContent.Add(new StringContent(credential.ApiUser), "apiUser");
                multiPartContent.Add(new StringContent(credential.ApiKey), "apiKey");
                multiPartContent.Add(new StringContent(mail.Body.From), "from");
                if (!string.IsNullOrWhiteSpace(mail.Body.FromName))
                {
                    multiPartContent.Add(new StringContent(mail.Body.FromName), "from");
                }
                multiPartContent.Add(new StringContent(mail.Body.Subject), "subject");
                if (!string.IsNullOrWhiteSpace(mail.Body.ReplyTo))
                {
                    multiPartContent.Add(new StringContent(mail.Body.ReplyTo), "replyTo");
                }
                if (mail.Body.LabelId != null)
                {
                    multiPartContent.Add(new StringContent(mail.Body.LabelId.Value.ToString()), "labelId");
                }

                // 是否使用模版发送
                if (mail.Content.UseTemplate)
                {
                    var content = (TemplateContent)mail.Content;
                    multiPartContent.Add(new StringContent(content.TemplateInvokeName), "templateInvokeName");
                }
                else
                {
                    var content = (TextContent)mail.Content;
                    if (content.ContentType == TextContent.ScContentType.Html)
                    {
                        multiPartContent.Add(new StringContent(content.Text), "html");
                    }
                    else
                    {
                        multiPartContent.Add(new StringContent(content.Text), "plain");
                    }
                }

                // 是否使用地址列表
                if (mail.To != null)
                {
                    if (mail.To.UseAddressList)
                    {
                        multiPartContent.Add(new StringContent("true"), "useAddressList");
                        multiPartContent.Add(new StringContent(mail.To.ToString()), "useAddressList");
                    }
                    else
                    {
                        var receiver = (MailAddressReceiver)mail.To;
                        if (!mail.Content.UseTemplate && receiver.IsBroadcastSend)
                        {
                            multiPartContent.Add(new StringContent(receiver.ToString()), "to");
                            var ccString = receiver.GetCcString();
                            if (!string.IsNullOrWhiteSpace(ccString))
                            {
                                multiPartContent.Add(new StringContent(ccString), "cc");
                            }
                            var bccString = receiver.GetBccString();
                            if (!string.IsNullOrWhiteSpace(bccString))
                            {
                                multiPartContent.Add(new StringContent(bccString), "bcc");
                            }
                        }
                        else
                        {
                            if (mail.Body.XSmtpApi?.Count == 0 || !mail.Body.XSmtpApi.ContainsKey("to"))
                            {
                                mail.Body.AddXSmtpapi("to", receiver.To.ToJson());
                            }
                        }
                    }
                }

                if (mail.Body.Headers?.Count > 0)
                {
                    multiPartContent.Add(new StringContent(mail.Body.Headers.ToJson()), "headers");
                }

                if (mail.Body.XSmtpApi?.Count > 0)
                {
                    multiPartContent.Add(new StringContent(mail.Body.XSmtpApi.ToJson()), "xsmtpapi");
                }

                multiPartContent.Add(new StringContent("true"), "respEmailId");
                multiPartContent.Add(new StringContent("false"), "useNotification");

                foreach (var item in mail.Body.Attachments)
                {
                    // application/octet-stream
                    multiPartContent.Add(new StreamContent(item.Content), item.Name);
                }

                var url = mail.Content.UseTemplate ? this.Configuration.SendTemplateApi : this.Configuration.SendEmailApi;
                using (var client = new HttpClient())
                {
                    var response = await client.PostAsync(url, multiPartContent);
                    return await this.ValidateAsync(response);
                }
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// 普通方式发送
        /// </summary>
        /// <param name="credential"></param>
        /// <param name="mail"></param>
        /// <returns></returns>
        protected virtual async Task<ResponseData<dynamic>> SendEmailAsync(Credential credential, SendCloudMail mail)
        {
            using (var client = new HttpClient())
            {
                var @params = new Dictionary<string, string>();

                @params.Add("apiUser", credential.ApiUser);
                @params.Add("apiKey", credential.ApiKey);
                @params.Add("from", mail.Body.From);
                @params.Add("fromName", mail.Body.FromName);
                @params.Add("subject", mail.Body.Subject);
                @params.Add("replyTo", mail.Body.ReplyTo);

                if (mail.Body.LabelId != null)
                {
                    @params.Add("replyTo", mail.Body.LabelId.Value.ToString());
                }

                if (mail.Content.UseTemplate)
                {
                    var content = (TemplateContent)mail.Content;
                    @params.Add("templateInvokeName", content.TemplateInvokeName);
                }
                else
                {
                    var content = (TextContent)mail.Content;
                    @params.Add(content.ContentType == TextContent.ScContentType.Html ? "html" : "plain", content.Text);
                }

                if (mail.To != null)
                {
                    if (mail.To.UseAddressList)
                    {
                        @params.Add("useAddressList", "true");
                        @params.Add("to", mail.To.ToString());
                    }
                    else
                    {
                        var receiver = (MailAddressReceiver)mail.To;
                        if (!mail.Content.UseTemplate && receiver.IsBroadcastSend)
                        {
                            @params.Add("to", receiver.ToString());
                            @params.Add("cc", receiver.GetCcString());
                            @params.Add("bcc", receiver.GetBccString());
                        }
                        else
                        {
                            if (mail.Body.XSmtpApi != null && !mail.Body.XSmtpApi.ContainsKey("to"))
                            {
                                mail.Body.AddXSmtpapi("to", receiver.To.ToJson());
                            }
                        }
                    }
                }

                if (mail.Body.Headers?.Count > 0)
                {
                    @params.Add("headers", mail.Body.Headers.ToJson());
                }

                if (mail.Body.XSmtpApi?.Count > 0)
                {
                    @params.Add("xsmtpapi", mail.Body.XSmtpApi.ToJson());
                }

                @params.Add("respEmailId", "true");
                @params.Add("useNotification", "false");

                var url = mail.Content.UseTemplate ? this.Configuration.SendTemplateApi : this.Configuration.SendEmailApi;
                var response = await client.PostAsync(url, new FormUrlEncodedContent(@params));
                return await this.ValidateAsync(response);
            }
        }