Chandra Bhooshan singh Ответов: 1

Как отправить электронную почту с помощью ASP .NET


using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Net.Mail;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Web;

namespace ProjectBuzzUtils
{
    public static class EmailHelper
    {
        public static void SendEmail(string from, string toEmails, string ccEmails, string subject, object data, string templateType)
        {
            Dictionary<string, string> dataList = ExtractClassData(data);
            string body = CreateEmailBody(dataList, templateType);
            SendHtmlFormattedEmail(from, toEmails, ccEmails, subject, body);
        }
        private static string CreateEmailBody(Dictionary<string, string> replaceElement, string templateType)
        {
            string body = string.Empty;
            var templatePath = "~/Views/EmailTemplate/" + templateType + ".cshtml";
            using (StreamReader reader = new StreamReader(HttpContext.Current.Server.MapPath(templatePath)))
            {
                body = reader.ReadToEnd();
                foreach (var pair in replaceElement)
                {
                    body = body.Replace(pair.Key, pair.Value);
                }
            }
            return body;
        }

        private static void SendHtmlFormattedEmail(string from, string toEmails, string ccEmails, string subject, string body)
        {
            string fromEmail = ConfigurationManager.AppSettings["FromEmail"].ToString();
            string host = ConfigurationManager.AppSettings["Host"].ToString();
            SmtpClient smtpClient = new SmtpClient();
            int tryAgain = 10;
            bool failed = false;
            do
            {
                try
                {
                    failed = false;
                    using (MailMessage mailMessage = new MailMessage())
                    {
                        MailMessage mm = new MailMessage();
                        mm.Body = body;
                        mm.IsBodyHtml = true;
                        if (!string.IsNullOrEmpty(toEmails))
                        {
                            foreach (string email in toEmails.Split(','))
                            {
                                mm.To.Add(new MailAddress(email));
                            }
                        }
                        if (!string.IsNullOrEmpty(ccEmails))
                        {
                            foreach (string email in ccEmails.Split(','))
                            {
                                mm.CC.Add(new MailAddress(email));
                            }
                        }
                        mm.From = new MailAddress(from);
                        mm.Subject = subject;

                        smtpClient.Host = host;
                        smtpClient.Send(mm);
                    }
                }
                catch (Exception ex) // I would avoid catching all exceptions equally, but ymmv
                {

                    failed = true;
                    tryAgain--;
                    var exception = ex.Message.ToString();
                    smtpClient.Dispose();
                    //Other code for saving exception message to a log.
                }
            } while (failed && tryAgain != 0);
        }

        public static Dictionary<string, string> ExtractClassData(object o)
        {
            if (o == null)
                return new Dictionary<string, string>();

            var type = o.GetType();
            var propertyInfos = type.GetProperties()
                .Select(p => new
                {
                    Name = p.GetCustomAttribute<DisplayAttribute>() != null ? p.GetCustomAttribute<DisplayAttribute>().Name : p.Name,
                    FormatAttribute = p.GetCustomAttribute<DisplayFormatAttribute>(),
                    Property = p,
                    Type = p.PropertyType,
                    Value = p.GetValue(o),
                });

            var dictionary = new Dictionary<string, string>();
            foreach (var property in propertyInfos.Where(p => p.Value != null))
            {
                if (property.Value != null)
                {
                    dictionary.Add("$$$" + property.Name + "$$$", FormatValue(property.Value, property.Type, property.FormatAttribute));
                }
            }
            dictionary.Add("$$$Date_String$$$", DateTime.UtcNow.AddHours(5.5).ToString());
            return dictionary;
        }
        private static string FormatValue(object value, Type type, DisplayFormatAttribute format)
        {
            if (value == null)
                return null;
            if (type.IsEnum || (Nullable.GetUnderlyingType(type) != null && Nullable.GetUnderlyingType(type).IsEnum))
            {
                if (!Enum.IsDefined(type, value))
                    return value.ToString();

                var display = type.GetField(value.ToString()).GetCustomAttribute<DisplayAttribute>();
                if (display != null)
                    return display.Name;
                return value.ToString();
            }
            if (type == typeof(string))
                return (string)value;

            if (format != null)
                return string.Format(format.DataFormatString, value);
            return value.ToString();
        }
    }
}


Что я уже пробовал:

/* -------------------------------------
ГЛОБАЛЬНЫЕ СБРОСЫ
------------------------------------- */
НВФ {
граница: отсутствует;
-ms-интерполяция-режим: бикубический;
максимальная ширина: 100%;
}

тело {
цвет фона: #f6f6f6;
семейство шрифтов: sans-serif;
-webkit-font-smoothing: сглаживание;
размер шрифта: 14px;
высота линии: 1,4;
маржа: 0;
прокладка: 0;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}

стол {
границы-крах: отдельные;
mso-table-lspace: 2pt;
mso-table-rspace: 2pt;
ширина: 100%;
}

стол тд {
семейство шрифтов: sans-serif;
размер шрифта: 14px;
вертикальное выравнивание: сверху;
}

стол {
граница: средняя;
границы-цвет: burlywood;
}

тд тр {
граница: средняя;
цвет границы: подсветка;
}
/* -------------------------------------
Корпус и контейнер
------------------------------------- */
.тело {
цвет фона: #f6f6f6;
ширина: 100%;
}
/* Установите максимальную ширину и сделайте так, чтобы он отображался как блок, чтобы он автоматически растягивался до этой ширины, но также сжимался на телефоне или чем-то еще */
.контейнер {
дисплей: блок;
Маржа: 0 авто !важно;
/* делает его центрированным */
максимальная ширина: 580px;
обивка: значение 10px;
ширина: 580px;
}
/* Это также должен быть блочный элемент, чтобы он заполнял 100% контейнера . */
.содержание {
размер коробки: бордюрная коробка;
дисплей: блок;
Маржа: 0 авто;
максимальная ширина: 900px;
обивка: 6px;
}
/* -------------------------------------
ВЕРХНИЙ, НИЖНИЙ КОЛОНТИТУЛЫ, ОСНОВНЫЕ
------------------------------------- */
.главный {
Предыстория: #ffffff;
граница-радиус: 3px;
ширина: 100%;
}

.обертка {
размер коробки: бордюрная коробка;
обивка: 20 пикселей;
}

.блок контента {
обивка-дно: 10px;
padding-top: 10px;
}

.нижний колонтитул {
ясно: обе;
Маржа-топ: 10px;
выравнивание текста: по центру;
ширина: 100%;
}

.футер тд,
.футер Р,
.размах нижнего колонтитула ,
.нижний колонтитул а {
цвет: #999999;
размер шрифта: 12px;
выравнивание текста: по центру;
}
/* -------------------------------------
ТИПОГРАФИЯ
------------------------------------- */
h1,
h2,
h3,
Н4 {
цвет: #000000;
семейство шрифтов: sans-serif;
шрифт-вес: 400;
высота линии: 1,4;
маржа: 0;
Маржи-нижней: 20 пикселей;
}

h1 {
размер шрифта: 35px;
шрифт-вес: 300;
выравнивание текста: по центру;
text-transform: capitalize;
}

п,
ул,
пр {
семейство шрифтов: sans-serif;
размер шрифта: 14px;
шрифт-вес: нормальный;
маржа: 0;
Маржа-дно: 15px;
}

п ли,
уль ли,
литий пр {
список-стиль-позиция: внутри;
поле слева: 5px;
}

один {
цвет: #3498db;
оформление текста: подчеркивание;
}


/* -------------------------------------
ДРУГИЕ СТИЛИ, КОТОРЫЕ МОГУТ БЫТЬ ПОЛЕЗНЫ
------------------------------------- */
.последний {
маржа-дно: 0;
}

.первый {
маржи-топ: 0;
}

.выравнивание-по центру {
выравнивание текста: по центру;
}

.выровнять-вправо {
выравнивание текста: справа;
}

.выровнять-влево {
выравнивание текста: слева;
}

.понятно {
ясно: обе;
}

.mt0 {
маржи-топ: 0;
}

.mb0 {
маржа-дно: 0;
}

.Слуцкий вывел сборную России {
цвет: прозрачный;
дисплей: нет;
высота: 0;
максимальная высота: 0;
максимальная ширина: 0;
непрозрачность: 0;
переполнения: скрытые;
mso-скрыть: все;
видимость: скрытая;
ширина: 0;
}

.питание-от А {
текстовое оформление: отсутствует;
}

эйчар {
граница: 0;
границы вниз: 1px твердых #f6f6f6;
Маржа: 20px 0;
}





 



Спасибо Вам за обратную связь !

Отзывы Пользователей Project Buzz
$$$Дата$$$






Привет, $$$Employee_Name$$$
Спасибо Вам за обратную связь !






Идентификатор Сотрудника : $$$Employee_Id$$$
Имя Сотрудника : $$$Employee_Name$$$
Код Сотрудника : $$$Employee_Code$$$
Тип Запроса : $$$QueryType$$$
Сообщение : $$$Сообщение$$$









С уважением,


Проект кайфа работы и производства














Питание от источника OPTUM.




Это электронное письмо, включая вложения, может содержать конфиденциальную и/или служебную информацию и может использоваться только тем физическим или юридическим лицом, которому оно адресовано. Если читатель настоящего электронного письма не является предполагаемым получателем или его уполномоченным агентом, то настоящим он уведомляется о том, что любое распространение, распространение или копирование настоящего электронного письма запрещено. Если вы получили это электронное письмо по ошибке, пожалуйста, сообщите об этом отправителю, ответив на это сообщение, и немедленно удалите это электронное письмо.








 

Yvan Rodrigues

С какой проблемой вы столкнулись?

Richard Deeming

Дамп кода-это не вопрос.

1 Ответов

Рейтинг:
2

MadMyche

Я бы очень рекомендовал вам запустить это в отлаживать пройдите шаг за шагом через это, выясните, где есть проблема (если таковая имеется), а затем вернитесь сюда и вырежьте весь код, который нам не нужно видеть.
Если это должен быть блок отправки SMTP, верните сообщения об исключениях обратно.

Другие вещи, которые могли бы помочь, будут ссылаться на AppSettings; если вы используете Gmail например, учетная запись gmail, связанная с адресом from, должна быть установлена на разрешить менее безопасные приложения

Большинство почтовых хостов также требуют учетные данные учетной записи перед отправкой; способ, которым вы используете эту настройку, не использует ни учетные данные по умолчанию, ни комбинацию имени пользователя и пароля.

Способ установки try...catch не делает вам никаких одолжений - если какой-либо из адресов электронной почты плох, он будет продолжать пытаться отправить всем снова и снова.