Как отправить электронное письмо в формате HTML с помощью ASP .NET Core 7

Мне нужно отправить электронное письмо с HTML-тегами с помощью ASP .NET Core 7, используя SMTP и MailKit. Я уже отправлял электронные письма с минимальным количеством HTML-тегов, например . Но мне нужно отправить верхние и нижние колонтитулы с изображениями (логотипами). Это схема API. API-запрос

И мне нужно отправить электронное письмо в формате HTML, как показано ниже. Образец письма

Я вставил html-код вот такотправляю электронное письмо

Но выдает такую ​​ошибку. Ошибка, с которой я столкнулся

Моя проблема в том, что я не знаю, как вставить HTML-код внутри тела, содержащий CSS и изображения. Как отправить такое письмо? Возникает ли эта ошибка из-за написанного мной кода API или есть другой способ сделать это?

Это код службы электронной почты, который я написал в .net.

using MailKit.Net.Smtp;
using MailKit.Security;
using MimeKit;
using MimeKit.Text;

namespace AgrarianTradeSystemWebAPI.Services.EmailService
{
    public class EmailService : IEmailService
    {
        private readonly IConfiguration _config;

        public EmailService(IConfiguration config)
        {
            _config = config;
        }

        public void SendEmail(EmailDto request)
        {
            var email = new MimeMessage();
            email.From.Add(MailboxAddress.Parse(_config.GetSection("EmailConfig:EmailUsername").Value));
            email.To.Add(MailboxAddress.Parse(request.To));
            email.Subject = request.Subject;
            email.Body = new TextPart(TextFormat.Html) { Text = request.Body };
            using var smtp = new SmtpClient();
            smtp.Connect(_config.GetSection("EmailConfig:EmailHost").Value, 587, SecureSocketOptions.StartTls);
            smtp.Authenticate(_config.GetSection("EmailConfig:EmailUsername").Value, _config.GetSection("EmailConfig:EmailPassword").Value);
            smtp.Send(email);
            smtp.Disconnect(true);
        }
    }
}

DTO, который я использовал для этого,

public class EmailDto
{
    public string To { get; set; } = string.Empty;
    public string Subject { get; set; } = string.Empty;
    public string Body { get; set; } = string.Empty;
}

В React JS я использовал axios для отправки электронных писем при регистрации пользователя в системе.

try {
        const response = await axios.post('https://localhost:7144/Auth/register', formData);
        console.info('Server Response:', response.data);
        if (response.status === 200) {
            const emailResponse = await axios.post('https://localhost:7144/api/Email', emaildata);
            console.info('Email Response:', emailResponse.data);
        }
    } catch (error) {
        console.error('Error:', error.response.data);
        if (error.response.data === "Email exist"){
            alert('Error: Email already exists and you can not register from existing email address');
        }
    }

🤔 А знаете ли вы, что...
React поддерживает локализацию и мультиязычность.


300
1

Ответ:

Решено

Мне нужно отправить электронное письмо с HTML-тегами с помощью ASP .NET Core 7, используя SMTP и MailKit. Я уже отправлял электронные письма с минимальным количеством HTML-тегов. нравиться . Но мне нужно отправить с помощью верхних и нижних колонтитулов с помощью изображения (логотипы).

Что ж, было бы очень удобно, если бы вы могли поделиться информацией о том, какой HTML-код вам был отправлен вместе с вложением к электронной почте. Но вы это упустили.

Однако, согласно скриншоту вашего сообщения об ошибке:

Это означает, что что-то пошло не так в синтаксисе HTML или в строке, которую вы отправили. Поэтому я думаю, вам следует сначала проверить это в HTML-визуализаторе или проверить, нет ли каких-либо ошибок в теле HTML-письма. Если в атрибуте CSS или теге html осталась какая-либо неверная строка или синтаксис, вы можете получить ту же ошибку, поэтому проверьте это еще раз.

Моя проблема в том, что я не знаю, как вставить HTML-код внутри тела. которые содержат CSS и изображения. Как отправить такое письмо?

Что касается пользовательского тела emil, такого как ваш CSS или изображение, вы можете использовать встроенный CSS с обязательным атрибутом в теге стиля, который вы можете определить, но он должен находиться в одном и том же месте. Не следует вставлять никакие внешние ссылки, которые могут привести к поломке. С другой стороны, для изображения вы можете использовать преобразование изображения в base64, как мы использовали в html image src. Или вы можете напрямую использовать путь к изображению, расположенный в папке wwwroot. Но base64 подходит больше.

Вы можете сделать следующее:

var bodyBuilder = new BodyBuilder();
        bodyBuilder.HtmlBody = @"
            <html>
 <head>
    <style>
        /* Your CSS styles here */
    </style>
</head>
<body>
    <h1 style='color:red;'>Hello!</h1>
    <p>This is a sample HTML email with a base64-encoded image.</p>
    <img src = "data:image/png;base64,iVBORw0KGgoA_Your_Base_64_Code_fv/X6F4MHQC0/0PyyAAAAAElFTkSuQmCC" alt = "Base64 Encoded Logo">
</body>
</html>";

После создания вышеуказанной строки html вы можете передать/связать ее в своем email.Body

Выход:

Когда письмо будет отправлено, оно должно выглядеть так, как показано ниже:

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