如何发送带有嵌入图片的电子邮件
How to send email with embedded pictures
我需要发送带有嵌入照片的电子邮件。我正在使用一个 html 模板电子邮件,里面有一个 img 标签,如下所示
<img src = "cid:image1">
我正在将模板加载到字符串中,然后将其添加到邮件中,然后添加图像文件部分
using namespace Poco::Net;
// create and initiliase a multipart html email
auto message = std::make_shared<Poco::Net::MailMessage>();
Poco::Net::MediaType mediaType("multipart", "related");
mediaType.setParameter("type", "text/html");
message->setContentType(mediaType);
// add the previously loaded html part
message->addPart("", new Poco::Net::StringPartSource(mailTextHtml, "text/html"), MailMessage::CONTENT_INLINE, MailMessage::ENCODING_QUOTED_PRINTABLE);
// get the image, tag it, and add it to the message
Poco::Net::FilePartSource *image = new Poco::Net::FilePartSource(ofToDataPath(imageFilePathName));
image->headers().add("Content-ID", "<image1>"); // assumes there is an image tag in the HTML for <image1>
message->addPart("", image, MailMessage::CONTENT_INLINE, MailMessage::ENCODING_BASE64);
// Encode the sender and set it.
message->setSender(Poco::Net::MailMessage::encodeWord(senderEMail, "UTF-8"));
这对于某些邮件客户端(outlook,gmail(工作正常,但对于图像作为附件通过的其他邮件客户端(ios,thunderbird(则不行。这是一个真正的问题,因为我们希望邮件同时显示在iPhone和Android上,并在屏幕上显示图片。
是我做错了什么,还是有更好的方法?
下面的
代码可能不是最优雅的实现,但它对我有用。
//This is a VS2017 console app with /clr support enabled.
// SendEmail.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <string>
#using <System.dll>
#using <System.Drawing.dll>
using namespace System;
using namespace System::Net;
using namespace System::Net::Mail;
using namespace System::Net::Mime;
using namespace System::Threading;
using namespace System::ComponentModel;
using namespace System::Runtime::InteropServices;
using namespace System::Text;
using namespace System::Drawing;
using namespace System::Drawing::Imaging;
using namespace System::IO;
int main()
{
SmtpClient^ client = gcnew SmtpClient(L"smtp.cox.net", 587);
MailMessage^ message = gcnew MailMessage();
try
{
// Specify the message content.
// Message body with embedded imeage
String^ body(L"<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">"
+ L"<HTML><HEAD><META http-equiv=Content-Type content="text/html; charset=iso-8859-1"></HEAD>"
+ L"<BODY><br><h2>The message of the email goes here</h2><br>"
+ L"<DIV style='height:100%; width:460px;'><div style='height:450px; width:450px;'><img src="cid:ImgContId" width='450' height='450' alt='Death' style='margin: 20px 0px 0px 20px;'/></div>"
+ L"</body></html>");
Image^ newImage = Image::FromFile("C:\Users\xxxxxxxx\Pictures\EmbeddedImg.png");
ImageConverter^ ic = gcnew ImageConverter();
array<Byte>^ byteArray = { 1,2,3,4 };
Type^ byteArrayType = byteArray->GetType();
array<Byte>^ imgByteArray = (array<Byte>^)ic->ConvertTo(newImage, byteArrayType);
MemoryStream^ imgMemStrm = gcnew MemoryStream(imgByteArray);
LinkedResource^ imgResource = gcnew LinkedResource(imgMemStrm);
imgResource->ContentId = L"ImgContId";
AlternateView^ avSurrogate;
AlternateView^ av = avSurrogate->CreateAlternateViewFromString(body, gcnew ContentType(L"text/html; charset=UTF-8"));
av->LinkedResources->Add(imgResource);
message->SubjectEncoding = System::Text::Encoding::UTF8;
message->BodyEncoding = System::Text::Encoding::UTF8;
message->IsBodyHtml = true;
message->AlternateViews->Add(av);
message->From = gcnew MailAddress(L"xxxxxxxx@gmail.com", L"First Last", System::Text::Encoding::UTF8);
message->Sender = gcnew MailAddress(L"xxxxxxxx@gmail.com", L"First Last", System::Text::Encoding::UTF8);
message->To->Add(gcnew MailAddress(L"xxxxxxxx@gmail.com", L"Loud Mouth", System::Text::Encoding::UTF8));
message->Subject = L"RE: xxxxxxxxxxxxxxxxxxxxxxxxxx";
// Send the message
client->EnableSsl = true;
client->Credentials = gcnew NetworkCredential(L"username", L"password");
client->Send(message);
}
catch (Exception^ ex)
{
Console::WriteLine(L"Exception caught: {0}", ex->ToString());
}
finally
{
// Clean up.
client->~SmtpClient();
delete message;
client = nullptr;
Console::WriteLine("Goodbye.");
}
return 0;
}
相关文章:
- 如何使用 c++ (curl) 发送电子邮件
- 在端口 587 (TLS) 上使用 CDO 发送电子邮件时出错
- 如何从 pjsip 发送电子邮件.是否有任何可用于发送电子邮件的默认方法
- 如何在使用 c++/COM 发送时在电子邮件中插入/嵌入图像文件(.png)
- 如何发送带有嵌入图片的电子邮件
- 我在尝试使用 libquickmail 发送电子邮件时收到错误
- C 和卷曲,发送电子邮件时编码奇怪的字符
- 获取已发送电子邮件的附件数量
- 使用C++WINSOCK(TCP、SSL)发送电子邮件
- 在windows错误检查中使用c++向gmail帐户发送电子邮件
- Poco无法发送电子邮件
- 如何通过指定的电子邮件客户端发送消息
- C++通过Outlook发送HTML电子邮件
- 从 C++ 中的 Linux 应用程序发送电子邮件
- 如何请求操作系统发送电子邮件
- 从dll中发送电子邮件的C++代码
- 尝试安装Qxt以发送电子邮件时出错
- 使用系统调用打开Outlook 2010以发送预格式化的电子邮件
- 可视化如何在不指定smtp服务器的情况下使用c++发送电子邮件
- 使用 Unity 在 iOS 应用程序上发送电子邮件时出错