Мне нужно отправить электронное письмо с 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 поддерживает локализацию и мультиязычность.
Мне нужно отправить электронное письмо с 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
Выход:
Когда письмо будет отправлено, оно должно выглядеть так, как показано ниже:
Примечание. Если вам нужна дополнительная помощь или пример, пожалуйста, обратитесь к этому официальному документу. А еще это тоже может быть полезно.