C 實現傳送郵件和附件功能

2022-09-29 12:36:11 字數 4250 閱讀 6888

標頭檔案/*************************

*傳送郵件模組標頭檔案

*可以傳送文字和附件(支援多個附件一起傳送)

**************************/

#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...