SMTP协议发送邮件问题

你的OPPA 2015-09-25 10:15:53
问题1:多个收件人怎么一次性发送邮件?SMTP协议的对应格式又是怎么样的?
我一开始是通过多次发送,每次发送一个邮箱地址。

memset(m_cSendBuff,0,sizeof(m_cSendBuff));
sprintf_s(m_cSendBuff,100000,"RCPT TO:<%s>\r\n",m_sMailInfo.m_pcReceiver);
rt=send(sock,m_cSendBuff,strlen(m_cSendBuff),0);
if(rt!=strlen(m_cSendBuff))
{
return false;
}
recv(sock,m_cReceiveBuff,1024,0);
if(m_cReceiveBuff[0]!='2' || m_cReceiveBuff[1]!='5' || m_cReceiveBuff[2]!='0')
{
MessageBox(NULL, "收件人邮箱地址有误!", "警告", NULL);
return false;
}


问题2:抄送人的邮件该怎么发送?对应的SMTP协议格式怎么写?
求大神指点···
...全文
171 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
你的OPPA 2015-09-29
  • 打赏
  • 举报
回复
引用 5 楼 fhw_bin_dl 的回复:
sorry,我搞错了。 抄送也是 "RCPT TO: <%s>\r\n" 在邮件头加入字符串信息 "Cc: somebody <mail@126.com>, somebody2 <mail2@126.com>,...\r\n"
问题已经解决了:

for (int i=0; i<10; i++)
    {
		memset(m_cReceiveBuff, 0, 1024);
		CString str = m_sMailInfo.m_pcReceiver[i];
		if (str.IsEmpty())
		{
			break;
		}
		memset(m_cSendBuff,0,sizeof(m_cSendBuff));
		sprintf_s(m_cSendBuff,100000,"RCPT TO:<%s>\r\n",m_sMailInfo.m_pcReceiver[i]);
		rt=send(sock,m_cSendBuff,strlen(m_cSendBuff),0);
		if(rt!=strlen(m_cSendBuff))
		{
			return 0;
		}

		int nTemp = recv(sock,m_cReceiveBuff,1024,0);
		if (nTemp <= 0)
		{
			return 0;
		}
		if(m_cReceiveBuff[0]!='2' || m_cReceiveBuff[1]!='5' || m_cReceiveBuff[2]!='0')
		{
			CString eroStr = _T("收件人不存在!\r\n");
			CString erstr = m_sMailInfo.m_pcReceiver[i] + eroStr;
			strcpy(Name, erstr);
			return -1;
		}
    }

	//抄送人邮箱
	int m_CsNum = 0;
	for (int i=0; i<10; i++)
	{
		CString str = m_sMailInfo.m_ccReceiver[i];
		if (str == "")
		{
			break;
		}
		sprintf_s(m_cSendBuff, 100000, "RCPT TO:<%s>\r\n", m_sMailInfo.m_ccReceiver[i]);
		rt = send(sock,m_cSendBuff,strlen(m_cSendBuff),0);
		if (rt!=strlen(m_cSendBuff))
		{
			return false;
		}
		m_CsNum ++;

		int nTemp = recv(sock,m_cReceiveBuff,1024,0);
		if (nTemp <= 0)
		{
			return false;
		}
		if(m_cReceiveBuff[0]!='2' || m_cReceiveBuff[1]!='5' || m_cReceiveBuff[2]!='0')
		{
			MessageBox(NULL, _T("抄送人邮箱地址有误!"), "警告", NULL);
			return false;
		}
	}
	
    memset(m_cSendBuff,0,sizeof(m_cSendBuff));
    memcpy(m_cSendBuff,"DATA\r\n",strlen("DATA\r\n"));
    rt=send(sock,m_cSendBuff,strlen(m_cSendBuff),0);
    if(rt!=strlen(m_cSendBuff))
    {
        return false;
    }
    recvNum = recv(sock,m_cReceiveBuff,1024,0);
	if (recvNum <= 0)
	{
		return false;
	}
	if(m_cReceiveBuff[0]!='3' || m_cReceiveBuff[1]!='5' || m_cReceiveBuff[2]!='4')
	{
		return false;
	}

    memset(m_cSendBuff,0,sizeof(m_cSendBuff));
    sprintf_s(m_cSendBuff,100000,"From:\"%s\"<%s>\r\n",m_sMailInfo.m_pcSenderName,m_sMailInfo.m_pcSender);
	for (int i=0; i<10; i++)
	{
		CString str = m_sMailInfo.m_pcReceiver[i];
		if (str == "")
		{
			break;
		}
		sprintf_s(&m_cSendBuff[strlen(m_cSendBuff)],1000,"To:<%s>\r\n",m_sMailInfo.m_pcReceiver[i]);
	}
	for (int i=0; i<10; i++)
	{
		CString str = m_sMailInfo.m_ccReceiver[i];
		if (str == "")
		{
			break;
		}
		sprintf_s(&m_cSendBuff[strlen(m_cSendBuff)],1000,"Cc:<%s>\r\n",m_sMailInfo.m_ccReceiver[i]);

	}
    sprintf_s(&m_cSendBuff[strlen(m_cSendBuff)],1000,"Subject:%s\r\nMime-Version: 1.0\r\nContent-Type: multipart/mixed;   boundary=\"INVT\"\r\n\r\n",m_sMailInfo.m_pcTitle);
    rt=send(sock,m_cSendBuff,strlen(m_cSendBuff),0);
    if(rt!=strlen(m_cSendBuff))
    {
        return false;
    }
fhw217 2015-09-28
  • 打赏
  • 举报
回复
Cc: somebody <mail@126.com>, somebody2 <mail2@126.com>\r\n
把邮件换成你自己的,以回车换行符结尾。 这是一个例子: http://www.codeproject.com/Articles/28806/SMTP-Client
你的OPPA 2015-09-28
  • 打赏
  • 举报
回复
引用 2 楼 fhw_bin_dl 的回复:
字符串:

Cc: somebody <mail@126.com>, somebody2 <mail2@126.com>
不对的,返回值为501
fhw217 2015-09-28
  • 打赏
  • 举报
回复
sorry,我搞错了。 抄送也是 "RCPT TO: <%s>\r\n" 在邮件头加入字符串信息 "Cc: somebody <mail@126.com>, somebody2 <mail2@126.com>,...\r\n"
fhw217 2015-09-25
  • 打赏
  • 举报
回复
字符串:

Cc: somebody <mail@126.com>, somebody2 <mail2@126.com>
你的OPPA 2015-09-25
  • 打赏
  • 举报
回复
第一个问题解决了,第二个问题怎么解决?

for (int i=0; i<10; i++)
    {
		OutputDebugString(m_sMailInfo.m_pcReceiver[i]);
		CString str = m_sMailInfo.m_pcReceiver[i];
		if (str.IsEmpty())
		{
			break;
		}
		memset(m_cSendBuff,0,sizeof(m_cSendBuff));
		sprintf_s(m_cSendBuff,100000,"RCPT TO:<%s>\r\n",m_sMailInfo.m_pcReceiver[i]);
		rt=send(sock,m_cSendBuff,strlen(m_cSendBuff),0);
		if(rt!=strlen(m_cSendBuff))
		{
			return false;
		}
    }
    recv(sock,m_cReceiveBuff,1024,0);
	if(m_cReceiveBuff[0]!='2' || m_cReceiveBuff[1]!='5' || m_cReceiveBuff[2]!='0')
	{
		MessageBox(NULL, "收件人邮箱地址有误!", "警告", NULL);
		return false;
	}

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧