#asp.net-core-mvc #html-email #qr-code #email-attachments #asp.net-core-mvc-2.0
Вопрос:
Я разрабатываю веб-сайт бронирования номеров, используя ASP.NET Основной MVC. Требование заключается в том, что каждый раз, когда клиент выполняет бронирование, система назначает уникальный идентификатор бронирования и генерирует QR-код для этого уникального номера бронирования и отправляет электронное письмо с этим QR-кодом (я использую шаблон электронной почты HTML). Клиент подойдет к персоналу и отсканирует QR-код для дальнейшего процесса. Я сгенерировал уникальный номер, создал QR-код, но не смог отправить этот код по электронной почте. Я могу отправить этот QR-код с моего контроллера для просмотра, но когда я прикрепляю этот QR-код, он не отображается в электронном письме.
Я прочитал некоторые вопросы в Google, большинство людей говорят, что мы должны сохранить этот сгенерированный QR-код в каталоге сервера, а затем отправить ссылку на него по электронной почте. Но мне было интересно, что если у меня тысяча заказов в месяц, то на моем сервере должна быть тысяча изображений QR-кода в папке, и позже каждый день количество изображений будет увеличиваться.
Я могу сохранять изображения на сервере и отправлять по электронной почте, но я хотел бы знать, какая лучшая практика для выполнения этой задачи, потому что многие компании уже используют эту функцию. Любые предложения, рекомендации будут оценены по достоинству.
Код практики, который отлично подходит для создания кода контроллера QR-кода:
Random r = new Random();
int number = r.Next(10, 100000);
using (MemoryStream ms = new MemoryStream())
{
QRCodeGenerator qrGenerator = new QRCodeGenerator();
QRCodeData qrCodeData = qrGenerator.CreateQrCode(number.ToString(), QRCodeGenerator.ECCLevel.Q);
QRCode qrCode = new QRCode(qrCodeData);
using (Bitmap bitMap = qrCode.GetGraphic(20))
{
bitMap.Save(ms, ImageFormat.Png);
ViewBag.QRCodeImage = "data:image/png;base64," Convert.ToBase64String(ms.ToArray());
ViewBag.Number = number;
}
}
И код тестового представления
@if (ViewBag.QRCodeImage != null)
{
<h3>Booking Number is @ViewBag.Number</h3>
<img src="@ViewBag.QRCodeImage" alt="" style="height:150px;width:150px" />
}
Is работает нормально и показывает мне QR-код в моем представлении
Но когда я отправляю этот QR-код по электронной почте, он не отображается в электронной почте.
Фактический код для электронной почты в контроллере:
string qrImagePath = "";
using (MemoryStream ms = new MemoryStream())
{
QRCodeGenerator qrGenerator = new QRCodeGenerator();
QRCodeData qrCodeData = qrGenerator.CreateQrCode(number.ToString(), QRCodeGenerator.ECCLevel.Q);
QRCode qrCode = new QRCode(qrCodeData);
using (Bitmap bitMap = qrCode.GetGraphic(20))
{
bitMap.Save(ms, ImageFormat.Png);
qrImagePath = "data:image/png;base64," Convert.ToBase64String(ms.ToArray());
ViewBag.Number = number;
}
}
MailText = MailText.Replace("[qrCode]", qrImagePath);
EmailHelper emailHelper = new EmailHelper();
bool emailResponse = emailHelper.SendEmail(model.Email, "Booking", MailText);
Помощник по электронной почте отправляет электронное письмо, и я вижу недавно отправленное электронное письмо в своем почтовом ящике, но изображение QR-кода не отображается.
Если кто-нибудь сможет помочь мне, я буду очень благодарен. Хорошего дня.
Комментарии:
1. Вы конвертируете изображение в base64? Есть много сообщений о том, почему это не обязательно сработает (некоторые почтовые клиенты поддерживают это, некоторые нет). Выполните поиск по «html-изображению электронной почты base64»
2. Да, я написал приведенный выше код после поиска. Многие из них говорят, что мы должны сохранить изображение на сервере, а затем ссылаться на него в html img src.
3. Но это не просто использование <img src=»»> в основном речь идет о ссылке на jpg/png/gif, а не на изображение в кодировке base64. Ты можешь это сделать? caniemail.com/features/image-base64
4. Я прошу рекомендаций или наилучшей практики.
5. Хорошо, мой комментарий-лучшая практика кодирования, но у меня нет опыта в том, что происходит, когда у вас тысячи изображений.