SMTP如何发送图片?

时间:2023-01-28 19:55:40
WEBBROWSE控件编辑文本,插入一张图片,然后获取HTML内容

<P>222</P>
<P><IMG border=0 hspace=0 alt="" align=baseline src="D:\a.jpg"></P>

然后把a.jpg的数据读取出来发送出去,登陆网页邮箱,有数据但是图片显示一把X,请教是哪里出问题了。如果把图片作为附件发送就能正常显示。

21 个解决方案

#1


D:\a.jpg在你的本地

#2


引用 1 楼 ndy_w 的回复:
D:\a.jpg在你的本地

是在本地,要怎样解决?

#3


在线等,疼死了。。
图片应该怎样发送,求指点,写邮件时HTML文本里有本地图片的链接,发送是要不要把这部分内容发送过呢?要过滤掉么还是获取到ewbbrowse控件的HTML内容直接全部发送过去?

#4


收取邮件显示图片时,我用的方法是读取图片文件名,读取图片文件数据然后写入本地文件,再改HTML文本内容,修改图片链接地址,虽然比较笨得方法,但勉强能实现,可是发送图片就不知道如何处理了

#5


base64

#6


标准的smtp不支持非文本,你看看MIME协议RFC 2045-2049

#7


引用 5 楼 aaseh 的回复:
base64

图片数据有base64处理,文件名没有,文件名不处理应该没问题

#8


引用 6 楼 buyong 的回复:
标准的smtp不支持非文本,你看看MIME协议RFC 2045-2049

不支持非文本为什么可以发送附件

#9


你还是贴代码吧。代码是最好的交流方式。

#10


下面段是整个邮件的代码

+OK
Return-Path: <...com>
Delivered-To:...com
Received: from workec.com ([183.39.139.131])
   by mail.workec.com WITH SMTP
   ID S272D8CC69F; Mon, 29 Aug 2011 12:48:43 +0800
Date: Mon, 29 Aug 2011 12:47:45
From: ....com
To: <....com>
Subject: 00
Content-Type: multipart/related; boundary="__MESSAGE__ID__54yg6f6h6y456345"

--__MESSAGE__ID__54yg6f6h6y456345
Content-type:text/html;Charset=gb2312
Content-Transfer-Encoding:8bit

<IMG border=0 hspace=0 alt="" align=baseline src="D:\a1_-_副本.jpg">


--__MESSAGE__ID__54yg6f6h6y456345
Content-Type: image/jpeg;name="a1_-_副本.jpg"
Content-Transfer-Encoding: base64

/9j/4AAQSkZJRgABAQEAYABgAAD.....下面都是图片数据
--__MESSAGE__ID__54yg6f6h6y456345--

#11


传数据的代码

// 发送文件
char *SendBuf = new char[BUFFER_READ + 1];
char *FileName =  new char[1024];
char *szCode = new char[2*BUFFER_READ];

        CStringA sTemp;          
sTemp="--";
sTemp+="__MESSAGE__ID__54yg6f6h6y456345";
sTemp+="\r\n";
sTemp+="Content-Type: image/jpeg;name=\"a1_-_副本.jpg\"\r\n";
sTemp+="Content-Transfer-Encoding: base64\r\n\r\n";
m_wsSMTPServer.Send( sTemp, sTemp.GetLength() );

FILE *Fin = fopen("D:\\a1_-_副本.jpg","rb");
memset(SendBuf,0,BUFFER_READ + 1);
int ReadSize = 0;
int nEncode = 0;
CBase64 base;
while (!feof(Fin) )
{
ReadSize = fread(SendBuf,sizeof(char),BUFFER_READ,Fin);
strcpy(szCode,base64_encode(reinterpret_cast<const unsigned char*>(SendBuf),ReadSize).c_str() );
m_wsSMTPServer.Send( szCode, strlen(szCode) );
memset(SendBuf,0,BUFFER_READ + 1);
memset(szCode,0,2*BUFFER_READ);
sTemp.Format("%s","\r\n\r\n");
m_wsSMTPServer.Send( sTemp, sTemp.GetLength() );
}

sTemp.Format("%s","\r\n\r\n");
m_wsSMTPServer.Send( sTemp, sTemp.GetLength() );

fclose(Fin);

邮件体只插入了一幅图片,对应的代码是
<IMG border=0 hspace=0 alt="" align=baseline src="D:\a1_-_副本.jpg">

#12


用其他邮箱试了下,比如说163发给QQ的。它们图片链接都经过了处理,类似
<IMG   src= "cid:271A8650@8B6D016B.FB45F845 "   >  
<IMG src="cid:babd777$1$13213a4e0c8$Coremail$dahaii0@163.com">这些,请教下如何把
<IMG border=0 hspace=0 alt="" align=baseline src="D:\a1_-_副本.jpg">转换成上述类容,base64么?貌似不是把

#13


首先:

Content-Type: image/jpeg;name="a1_-_副本.jpg"<---------是D:\a1_-_副本.jpg

#14


Content-Transfer-Encoding:8bit<--------------7bit

#15


引用 13 楼 aaseh 的回复:
首先:

Content-Type: image/jpeg;name="a1_-_副本.jpg"<---------是D:\a1_-_副本.jpg

这个是写错了,尝试了很多种方法。14楼的我先试下,感谢回答

#16


改了还是显示一把叉,总感觉链接的地址不对,如果直接用本地地址不加处理,那链接地址对接收方来收不没有任何意义么

#17


跪求。。。

#18


<IMG border=0 hspace=0 alt="" align=baseline src="cid:__abc@dd.com">



--__MESSAGE__ID__54yg6f6h6y456345
Content-Type: image/jpeg;
name="Catch1.jpg"
Content-Transfer-Encoding: base64
Content-ID: <__abc@dd.com>

#19


还是不太对啊。。泪奔。。

#20


泪奔啊。。。求个好心人。。。

#21


18楼你是对的,可能今天下午试的时候某个细节错了,晚上折腾了下OK了。。爽

#1


D:\a.jpg在你的本地

#2


引用 1 楼 ndy_w 的回复:
D:\a.jpg在你的本地

是在本地,要怎样解决?

#3


在线等,疼死了。。
图片应该怎样发送,求指点,写邮件时HTML文本里有本地图片的链接,发送是要不要把这部分内容发送过呢?要过滤掉么还是获取到ewbbrowse控件的HTML内容直接全部发送过去?

#4


收取邮件显示图片时,我用的方法是读取图片文件名,读取图片文件数据然后写入本地文件,再改HTML文本内容,修改图片链接地址,虽然比较笨得方法,但勉强能实现,可是发送图片就不知道如何处理了

#5


base64

#6


标准的smtp不支持非文本,你看看MIME协议RFC 2045-2049

#7


引用 5 楼 aaseh 的回复:
base64

图片数据有base64处理,文件名没有,文件名不处理应该没问题

#8


引用 6 楼 buyong 的回复:
标准的smtp不支持非文本,你看看MIME协议RFC 2045-2049

不支持非文本为什么可以发送附件

#9


你还是贴代码吧。代码是最好的交流方式。

#10


下面段是整个邮件的代码

+OK
Return-Path: <...com>
Delivered-To:...com
Received: from workec.com ([183.39.139.131])
   by mail.workec.com WITH SMTP
   ID S272D8CC69F; Mon, 29 Aug 2011 12:48:43 +0800
Date: Mon, 29 Aug 2011 12:47:45
From: ....com
To: <....com>
Subject: 00
Content-Type: multipart/related; boundary="__MESSAGE__ID__54yg6f6h6y456345"

--__MESSAGE__ID__54yg6f6h6y456345
Content-type:text/html;Charset=gb2312
Content-Transfer-Encoding:8bit

<IMG border=0 hspace=0 alt="" align=baseline src="D:\a1_-_副本.jpg">


--__MESSAGE__ID__54yg6f6h6y456345
Content-Type: image/jpeg;name="a1_-_副本.jpg"
Content-Transfer-Encoding: base64

/9j/4AAQSkZJRgABAQEAYABgAAD.....下面都是图片数据
--__MESSAGE__ID__54yg6f6h6y456345--

#11


传数据的代码

// 发送文件
char *SendBuf = new char[BUFFER_READ + 1];
char *FileName =  new char[1024];
char *szCode = new char[2*BUFFER_READ];

        CStringA sTemp;          
sTemp="--";
sTemp+="__MESSAGE__ID__54yg6f6h6y456345";
sTemp+="\r\n";
sTemp+="Content-Type: image/jpeg;name=\"a1_-_副本.jpg\"\r\n";
sTemp+="Content-Transfer-Encoding: base64\r\n\r\n";
m_wsSMTPServer.Send( sTemp, sTemp.GetLength() );

FILE *Fin = fopen("D:\\a1_-_副本.jpg","rb");
memset(SendBuf,0,BUFFER_READ + 1);
int ReadSize = 0;
int nEncode = 0;
CBase64 base;
while (!feof(Fin) )
{
ReadSize = fread(SendBuf,sizeof(char),BUFFER_READ,Fin);
strcpy(szCode,base64_encode(reinterpret_cast<const unsigned char*>(SendBuf),ReadSize).c_str() );
m_wsSMTPServer.Send( szCode, strlen(szCode) );
memset(SendBuf,0,BUFFER_READ + 1);
memset(szCode,0,2*BUFFER_READ);
sTemp.Format("%s","\r\n\r\n");
m_wsSMTPServer.Send( sTemp, sTemp.GetLength() );
}

sTemp.Format("%s","\r\n\r\n");
m_wsSMTPServer.Send( sTemp, sTemp.GetLength() );

fclose(Fin);

邮件体只插入了一幅图片,对应的代码是
<IMG border=0 hspace=0 alt="" align=baseline src="D:\a1_-_副本.jpg">

#12


用其他邮箱试了下,比如说163发给QQ的。它们图片链接都经过了处理,类似
<IMG   src= "cid:271A8650@8B6D016B.FB45F845 "   >  
<IMG src="cid:babd777$1$13213a4e0c8$Coremail$dahaii0@163.com">这些,请教下如何把
<IMG border=0 hspace=0 alt="" align=baseline src="D:\a1_-_副本.jpg">转换成上述类容,base64么?貌似不是把

#13


首先:

Content-Type: image/jpeg;name="a1_-_副本.jpg"<---------是D:\a1_-_副本.jpg

#14


Content-Transfer-Encoding:8bit<--------------7bit

#15


引用 13 楼 aaseh 的回复:
首先:

Content-Type: image/jpeg;name="a1_-_副本.jpg"<---------是D:\a1_-_副本.jpg

这个是写错了,尝试了很多种方法。14楼的我先试下,感谢回答

#16


改了还是显示一把叉,总感觉链接的地址不对,如果直接用本地地址不加处理,那链接地址对接收方来收不没有任何意义么

#17


跪求。。。

#18


<IMG border=0 hspace=0 alt="" align=baseline src="cid:__abc@dd.com">



--__MESSAGE__ID__54yg6f6h6y456345
Content-Type: image/jpeg;
name="Catch1.jpg"
Content-Transfer-Encoding: base64
Content-ID: <__abc@dd.com>

#19


还是不太对啊。。泪奔。。

#20


泪奔啊。。。求个好心人。。。

#21


18楼你是对的,可能今天下午试的时候某个细节错了,晚上折腾了下OK了。。爽