標頭檔案/*************************
*傳送郵件模組標頭檔案
*可以傳送文字和附件(支援多個附件一起傳送)
**************************/
#pragma once
struct smailinfo //郵件資訊
}; class csendmail
; 模組實現檔案
/****************************
* 傳送郵件模組
*可以傳送文字和附件(支援多個附件一起傳送)
*date:2011-12-01
******************************/
#include "stdafx.h"
#include "sendmail.h"
#include "winsock2.h"
#pragma comment(lib,"wsock32")
csendmail::csendmail(void)
csendmail::~csendmail(void)
void csendmail::char2base64(char* pbuff64,char* psrcbuff,int ilen)
else if (point==4)
else if(point==6)
iindex+=n;//與psrcbuff-1的低point結合組成base64的索引
*pbuff64++=base64encode[iindex];//由索引表得到pbuff64
n=((*psrcbuff)《程式設計客棧l csendmail::createsocket(socket &sock)
if ( lobyte( wsadata.wversion ) != 2 ||
hibyte( wsadata.wversion ) != 2 )
sock = socket(af_inet,sock_stream,ipproto_ip);
if (sock == invalid_socket)
sockaddr_in servaddr;
memset(&servaddr,0,sizeof(sockaddr_in));
servaddr.sin_family = af_inet;
servaddr.sin_port = htons(25);//發郵件一般都是25埠
if(m_smailinfo.m_pcipname=="")
else
int ret = connect(sock,(sockaddr*)&servaddr,sizeof(servaddr));//建立連線
if (ret == socket_error)
return true; }
bool csendmail::logon(socket &sock)
memset(m_csendbuff,0,sizeof(m_csendbuff));
sprintf_s(m_csendbuff,"auth login\r\n");
send(sock,m_csendbuff,strlen(m_csendbuff),0);//請求登入
recv(sock,m_creceivebuff,1024,0);
if(m_creceivebuff[0]!='3' || m_creceivebuff['3' || m_creceivebuff[2]!='4')
memset(m_csendbuff,0,sizeof(m_csendbuff));
char2base64(m_csendbuff,m_smailinfo.m_pcusername,strlen(m_smailinfo.m_pcusername));
m_csendbuff[strlen(m_csendbuff)]='\r';
m_csendbuff[st'\n';
send(sock,m_csendbuff,strlen(m_csendbuff),0);//傳送使用者名稱
recv(sock,m_creceivebuff,1024,0);
if(m_creceivebuff[0]!='3' || m_creceivebuff[1]!='3' || m_creceivebuff[2]!='4')
memset(m_csendbuff,0,sizeof(m_csendbuff));
char2base64(m_csendbuff,m_smailinfo.m_pcuserpassword,strlen(m_smailinfo.m_pcuserpassword));
m_csendbuff[strlen(m_csendbuff)]='\r';
m_csendbuff[strlen(m_csendbuff)]='\n';
send(sock,m_csendbuff,strlen(m_csendbuff),0);//傳送使用者密碼
recv(sock,m_creceivebuff,1024,0);
if(m_creceivebuff[0]!='2' || m_creceivebuff[1]!='3' || m_creceivebuff[2]!='5')
return true;//登入成功 }
bool csendmail::sendhead(socket &sock)
recv(sock,m_creceivebuff,1024,0);
memset(m_csendbuff,0,sizeof(m_csendbuff));
sprintf_s(m_csendbuff,"rcpt to:\r\n",m_smailinfo.m_pcreceiver);
rt=send(sock,m_csendbuff,strlen(m_csendbuff),0);
if(rt!=strlen(m_csendbuff))
recv(sock,m_creceivebuff,1024,0);
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))
recv(sock,m_creceivebuff,1024,0);
memset(m_csendbuff,0,sizeof(m_csendbuff));
sprintf_s(m_csendbuff,"from:\"%s\"\r\n",m_smailinfo.m_pcsendername,m_smailinfo.m_pcsender);
sprintf_s(&m_csendbuff[strlen(m_csendbuff)],150,"to:\"invt.com.cn\"\r\n",m_smailinfo.m_pcreceiver);
sprintf_s(&m_csendbuff[strlen(m_csendbuff)],150,"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 true; }
bool csendmail::sendtextbody(socket &sock)
else
} bool csendmail::sendfilebody(socket &sock)
bool csendmail::sendmail(smailinfo &smailinfo)
socket sock;
if(!createsocket(sock))//建立連線
if(!logon(sock))//登入郵箱
if(!sendhead(sock))//傳送郵件頭
if(!sendtextbody(sock))//傳送郵件文字部分
if(!sendfilebody(sock))//傳送附件
if(!sendend(sock))//結束郵件,並關閉sock
return true;
} 本文位址:
c 傳送郵件 附件
winform窗體 如下 using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.linq using ...
C 傳送郵件及附件
protected void button1 click object sender,eventargs e c 傳送郵件函式 傳送者郵箱 傳送人 接受者郵箱 收件人 主題 內容 附件 smtp伺服器 郵箱 密碼 public bool sendmail string sfrom,string sf...
C 實現郵件傳送功能
傳送郵件所用的核心知識點 具體 請看如下所示 using system using system.collections.generic using system.linq using system.text using system.net.mail using system.net.mime u...