Mvc .Net.Mail: Как отправить письмо с изображением (логотипом)
Я использую три класса для отправки электронной почты, но я не могу объединить текстовую электронную почту с изображением или просто отправить изображение. Когда я получаю электронную почту, я вижу пустое изображение. Помогите мне изменить мой код, чтобы я мог отправить электронное письмо с:
- текст
- образ
и стиль
public class SendService : IDistributionProvider { public int Send(System.Xml.Linq.XDocument recipientsData, string subject, string fromName, string fromAccount) { foreach (XElement element in recipientsData.Root.Elements()) { string email = element.Element("email").Value; string name = element.Element("name").Value; string message = element.Element("message").Value; bool result = EmailUtils.SendEmail(fromAccount, fromName, email, name, subject, message.Replace("\n", "<br/>")); } return 1; } public interface IDistributionProvider { int Send(XDocument recipientsData, string subject, string fromName, string fromAccount); } public static class EmailUtils { private static string sendHostName; private static int sendPort; private static string userName; private static string password; private static string defaultFromEmail; private static string defaultFromName; static EmailUtils() { sendHostName = ConfigurationManager.AppSettings["sendHostName"]; sendPort = int.Parse(ConfigurationManager.AppSettings["sendPort"]); defaultFromEmail = ConfigurationManager.AppSettings["fromEmail"]; defaultFromName = ConfigurationManager.AppSettings["fromName"]; string credential = Utils.DecryptString(ConfigurationManager.AppSettings["credential"]); if (!string.IsNullOrEmpty(credential) && credential.Split(";".ToCharArray()).Length > 1) { userName = credential.Split(";".ToCharArray())[0]; password = credential.Split(";".ToCharArray())[1]; } } public static bool SendEmail(string toEmail, string toName, string subject, string body) { return SendEmail(defaultFromEmail, defaultFromName, toEmail, toName, subject, body); } public static bool SendEmail(string fromEmail, string fromName, string toEmail, string toName, string subject, string body) { try { if (string.IsNullOrEmpty(toEmail)) { return false; } if (string.IsNullOrEmpty(toName)) { toName = toEmail.Substring(0, toEmail.IndexOf("@")); } if (string.IsNullOrEmpty(fromEmail)) { fromEmail = defaultFromEmail; } if (string.IsNullOrEmpty(fromName)) { fromName = defaultFromName; } Message message = new Message(); message.Charset = "UTF-8"; message.Subject = Codec.RFC2047Encode(subject, "UTF-8"); message.From = new Address(fromEmail, fromName); message.To.Add(toEmail, toName); message.BodyHtml.Format = BodyFormat.Html; message.BodyHtml.Charset = "UTF-8"; message.BodyHtml.Text = body; return ActiveUp.Net.Mail.SmtpClient.SendSsl(message, sendHostName, sendPort, userName, password, SaslMechanism.Login); } catch { return false; } }
}
Таким образом, я отправляю письмо - просто текст:
string bodyEmail = "<h2>Welcome to website</h2></br><div><p>Thank for using website</p></div>";
EmailUtils.SendEmail("xxx@gmail.com","xxxx","Contact",bodyEmail);
2 ответа
Самый простой способ сделать это - встроить ваши изображения с помощью Data URI.
По сути, вы вставляете изображение в HTML-код вашего сообщения. Просто следуйте формату
data:[<MIME-type>][;charset=<encoding>][;base64]
где mime-type может быть image/jpeg, charset должен быть ASCII, а байты изображения преобразованы в base64. Вы можете получить это, прочитав байты файла образа с диска
byte[] imaeg = File.ReadAllBytes("nekkedladies.jpg");
затем преобразовать байтовый массив в строку base 64
var base64Imaeg = System.Convert.ToBase64String(imaeg);
соедините это и вставьте в свой HTML (украденный из вики)
извиняюсь
Я действительно столкнулся с этой же проблемой, и что мне действительно помогло, так это. В моем случае у меня был HTML, и я должен был разобрать его с помощью HtmlUtilityPack. Я бы не рекомендовал использовать закодированную строку, так как она не полностью поддерживается, и это делает ваше сообщение раздутым. Путь cid также заключается в том, как outlook добавляет изображения в электронное письмо. Я бы добавил код, но я думаю, что пример был достаточно хорош в моем случае.