『壹』 郵件發送程序客戶端(C語言源代碼)
SMTP協議是用於發送電子郵件的主要通信協議,是C語言進行網路編程時經常都會使用到的基礎協議之一。郵件發送客戶端程序要求使用C語言socket通信來完成SMTP協議,實現郵件發送程序的客戶端應用,通過該程序能夠向遠程的SMTP伺服器發送電子郵件的請求,並發送到指定的電子郵箱之中。 第一階段:只要求通過dos窗口實現簡單文本郵件的發送,具體的要求如下: 程序啟動後錄入SMTP伺服器地址; 錄入SMTP伺服器用戶名和密碼; 錄入收件人地址和抄送人地址(允許錄入多個,中間以分號分隔); 錄入郵件主題; 錄入郵件內容完成後發送郵件; 郵件發送成功後系統提供郵件發送成功; 第二階段:要求能夠實現發送MIME格式郵件或利用Win32編程將程序升級為桌面應用程序,進入第二階段必須滿足以下條件: 必須是在充分理解SMTP協議的基礎上; 必須是在充分理解MIME格式的基礎上; 利用C語言將發送的內容格式化為MIME格式; 可以首先考慮只實現MIME格式的一部分格式化需求; 升級桌面應用程序必須對Win32 API有一定的理解和掌握;
『貳』 用C語言幫忙寫一個「TCP Client/Server模式的通信程序設計與實現」
CLIENT:
#include <stdio.h>
#include <stdio.h>
#include <winsock.h>
#pragma comment(lib,"Ws2_32")
#define PORT 6666 /* 客戶機連接遠程主機的埠 */
#define MAXDATASIZE 100 /* 每次可以接收的最大位元組 */
int main()
{
int sockfd, numbytes;
char buf[MAXDATASIZE];
char msg[MAXDATASIZE];
char *argv="127.0.0.1";
struct sockaddr_in their_addr; /* 對方的地址埠信息 */
WSADATA ws;WSAStartup(MAKEWORD(2,2),&ws); //初始化Windows Socket Dll
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
//如果建立socket失敗,退出程序
printf("socket error\n");
exit(1);
}
//連接對方
their_addr.sin_family = AF_INET; /* 協議類型是INET */
their_addr.sin_port = htons(PORT); /* 連接對方PORT埠 */
their_addr.sin_addr.s_addr = inet_addr(argv); /* 連接對方的IP */
if (connect(sockfd, (struct sockaddr *)&their_addr,sizeof(struct sockaddr)) == -1)
{
//如果連接失敗,退出程序
printf("connet error\n");
closesocket(sockfd);
exit(1);
}
while(1){
scanf("%s",msg);
//發送數據
if (send(sockfd, msg, MAXDATASIZE, 0) == -1)
{
printf("send error");
closesocket(sockfd);
exit(1);
}
//接收數據,並列印出來
if ((numbytes=recv(sockfd, buf, MAXDATASIZE, 0)) == -1)
{
//接收數據失敗,退出程序
printf("recv error\n");
closesocket(sockfd);
exit(1);
}
buf[numbytes] = '\0';
printf("Received: %s\n",buf); }
closesocket(sockfd);
return 0;
}
SERVER:
#include <stdio.h>
#include <winsock.h>
#pragma comment(lib,"Ws2_32")
#define MYPORT 6666 /*定義用戶連接埠*/
#define BACKLOG 10 /*多少等待連接控制*/ #define MAXDATASIZE 100
int main()
{
int sockfd, new_fd; /*定義套接字*/
struct sockaddr_in my_addr; /*本地地址信息 */
struct sockaddr_in their_addr; /*連接者地址信息*/
int sin_size,numbytes; char msg[10],buf[MAXDATASIZE];
WSADATA ws;
WSAStartup(MAKEWORD(2,2),&ws); //初始化Windows Socket Dll
//建立socket
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
//如果建立socket失敗,退出程序
printf("socket error\n");
exit(1);
}
//bind本機的MYPORT埠
my_addr.sin_family = AF_INET; /* 協議類型是INET */
my_addr.sin_port = htons(MYPORT); /* 綁定MYPORT埠*/
my_addr.sin_addr.s_addr = INADDR_ANY; /* 本機IP*/
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr))== -1)
{
//bind失敗,退出程序
printf("bind error\n");
closesocket(sockfd);
exit(1);
}
//listen,監聽埠
if (listen(sockfd, BACKLOG) == -1)
{
//listen失敗,退出程序
printf("listen error\n");
closesocket(sockfd);
exit(1);
}
printf("listen...");
//等待客戶端連接
sin_size = sizeof(struct sockaddr_in);
if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1)
{
printf("accept error\n");
closesocket(sockfd);
exit(1);
}
printf("\naccept!\n");
while(1) {
if((numbytes=recv(new_fd, buf, MAXDATASIZE, 0)) == -1) continue;
if(!strcmp(buf,"bye"))
{
//成功,關閉套接字
closesocket(sockfd);
closesocket(new_fd);
return 0;
}
printf("%s %d",buf,strlen(buf));
sprintf(msg,"%d",strlen(buf));
if (send(new_fd,msg,MAXDATASIZE, 0) == -1)
{
printf("send ERRO");
closesocket(sockfd);
closesocket(new_fd);
return 0;
}
}
}
『叄』 我想用C語言寫一個郵件收發的程序,求指教!要怎麼下手,求詳細解釋!謝謝!
BOOLexSetTestBands(LPBYTElpLinear,shortheight,longstride)
{//
int i,j,k;
short bwid=30;
short offx,offy;
//setbands
if(!lpLinear) returnFALSE;
for(i=0;i<height;i++)
FillMemory(lpLinear+stride*i,stride,i);
offy=min(256,height/2);
for(i=offy;i<height;i++)
{
FillMemory(lpLinear+stride*i,stride/2,i-offy);
for(k=0,j=stride/2;j<stride;j+=24,k+=18)
{
FillMemory(lpLinear+stride*i+j,24,k);
}
}
offy=0;
//black
for(i=offy;i<offy+32;i++)
{
for(j=stride/2;j<stride;j+=3)
*(DWORD*)(lpLinear+stride*i+j)=0x0;
}
offy=i;
offx=0;
for(i=0;i<min(256,height/2);i++)
{
for(j=offx;j<offx+bwid;j+=3)
{
*(DWORD*)(lpLinear+stride*i+j)=0x0;
}
}
//blue
for(i=offy;i<offy+32;i++)
{
for(j=stride/2;j<stride;j+=3)
*(DWORD*)(lpLinear+stride*i+j)=0xff;
}
offy=i;
offx+=bwid;
for(i=0;i<min(256,height/2);i++)
{
for(j=offx;j<offx+bwid;j+=3)
{
*(DWORD*)(lpLinear+stride*i+j)=0xff;
}
}
//green
for(i=offy;i<offy+32;i++)
{
for(j=stride/2;j<stride;j+=3)
*(DWORD*)(lpLinear+stride*i+j)=0xff00;
}
offy=i;
offx+=bwid;
for(i=0;i<min(256,height/2);i++)
{
for(j=offx;j<offx+bwid;j+=3)
{
*(DWORD*)(lpLinear+stride*i+j)=0xff00;
}
}
//cyan
for(i=offy;i<offy+32;i++)
{
for(j=stride/2;j<stride;j+=3)
*(DWORD*)(lpLinear+stride*i+j)=0xffff;
}
offy=i;
offx+=bwid;
for(i=0;i<min(256,height/2);i++)
{
for(j=offx;j<offx+bwid;j+=3)
{
*(DWORD*)(lpLinear+stride*i+j)=0xffff;
}
}
//red
for(i=offy;i<offy+32;i++)
{
for(j=stride/2;j<stride;j+=3)
*(DWORD*)(lpLinear+stride*i+j)=0xff0000;
}
offy=i;
offx+=bwid;
for(i=0;i<min(256,height/2);i++)
{
for(j=offx;j<offx+bwid;j+=3)
{
*(DWORD*)(lpLinear+stride*i+j)=0xff0000;
}
}
//magenta
for(i=offy;i<offy+32;i++)
{
for(j=stride/2;j<stride;j+=3)
*(DWORD*)(lpLinear+stride*i+j)=0xff00ff;
}
offy=i;
offx+=bwid;
for(i=0;i<min(256,height/2);i++)
{
for(j=offx;j<offx+bwid;j+=3)
{
*(DWORD*)(lpLinear+stride*i+j)=0xff00ff;
}
}
//yellow
for(i=offy;i<offy+32;i++)
{
for(j=stride/2;j<stride;j+=3)
*(DWORD*)(lpLinear+stride*i+j)=0xffff00;
}
offy=i;
offx+=bwid;
for(i=0;i<min(256,height/2);i++)
{
for(j=offx;j<offx+bwid;j+=3)
{
*(DWORD*)(lpLinear+stride*i+j)=0xffff00;
}
}
//white
for(i=offy;i<offy+32;i++)
{
for(j=stride/2;j<stride;j+=3)
*(DWORD*)(lpLinear+stride*i+j)=0xffffff;
}
offy=i;
offx+=bwid;
for(i=0;i<min(256,height/2);i++)
{
for(j=offx;j<offx+bwid;j+=3)
{
*(DWORD*)(lpLinear+stride*i+j)=0xffffff;
}
}
//repeat
offx+=bwid;
while(stride/2>offx)//remain
{
for(i=0;i<min(256,height/2);i++)
{
memcpy(lpLinear+stride*i+offx,lpLinear+stride*i,stride/2-offx);
}
offx+=bwid*8;
}
return1;
}
BOOLexOutReport(HDChPr,LPBITMAPINFOHEADERlpbi,LPSTRlpdib)
{
char szLine[1024];
char str[50];
int startx;
SIZE sSize;
RECT rect;
HFONT hFont,hOldFont;
int Horz,Vert;
float XZoom,YZoom;
TEXTMETRICTextMetric;/*informationaboutcharactersize*/
Horz=GetDeviceCaps(hPr,HORZRES);
XZoom=(float)Horz/2400;//instandardof300dpiforA4
Vert=GetDeviceCaps(hPr,VERTRES);
YZoom=(float)Vert/3300;
rect.top=(int)(600*YZoom);
rect.bottom=(int)(2600*YZoom);
//Sethospitalname
hFont=CreateFont((int)(90*YZoom),(int)(35*XZoom),0,0,0,0,0,0,0,0,0,0,0,NULL);
hOldFont=(HFONT)SelectObject(hPr,hFont);
GetTextMetrics(hPr,&TextMetric);
Rectangle(hPr,(int)(100*XZoom),(int)(155*YZoom),(int)((Horz-100)*XZoom),(int)(156*YZoom));//underline
strcpy(szLine,"中國醫科院北京腫瘤醫院");
GetTextExtentPoint32(hPr,szLine,strlen(szLine),&sSize);
startx=(Horz-sSize.cx)/2;
TextOut(hPr,startx,(int)(50*YZoom),(LPSTR)szLine,strlen(szLine));
SelectObject(hPr,hOldFont);
DeleteObject(hFont);
//setdatecontents
hFont=CreateFont((int)(62*YZoom),(int)(22*XZoom),0,0,0,0,0,0,0,0,0,0,0,NULL);
hOldFont=(HFONT)SelectObject(hPr,hFont);
//year-month-date
strcpy(szLine,"列印日期:");
_strdate(str);
str[2]=0;
str[5]=0;
str[8]=0;
strcat(szLine,str+6);
strcat(szLine,"-");//"年");
strcat(szLine,str);
strcat(szLine,"-");//"月");
strcat(szLine,str+3);
//strcat(szLine,"日");
TextOut(hPr,(int)(1600*XZoom),(int)(200*YZoom),(LPSTR)szLine,strlen(szLine));
//deletefont
SelectObject(hPr,hOldFont);
DeleteObject(hFont);
rect.right=(int)((float)lpbi->biWidth/lpbi->biHeight
*(rect.bottom-rect.top));
rect.left=(int)((Horz-rect.right)/2+100*XZoom);
rect.right+=rect.left;
if(rect.left<0)
{
rect.left=(int)(100*XZoom);
rect.right=(int)(2200*XZoom);
rect.bottom=(int)((float)lpbi->biHeight/lpbi->biWidth
*(rect.right-rect.left))+rect.top;
}
StretchDIBits(hPr,//DestDC
rect.left,//DestX
rect.top,//DestY
rect.right-rect.left,//DestWidth
rect.bottom-rect.top,//DestHeight
0,//SrcX
0, //SrcY
(int)lpbi->biWidth,//SrcWidth
(int)lpbi->biHeight,//SrcHeight
lpdib,//lpBits
(LPBITMAPINFO)lpbi,//lpBitInfo
DIB_RGB_COLORS,//wUsage
SRCCOPY);//dwROP
return1;
}
voidCOkMfcView::OnPrintpic()
{
//TODO:Addyourcommandhandlercodehere
//列印圖像
CPrintDialog cpd=(FALSE,PD_ALLPAGES);
HDC hPr;
CDC cdc;
DOCINFO docinfo;
cpd.DoModal();
hPr=cpd.GetPrinterDC();
if(!hPr)return;
cdc.Attach(hPr);
docinfo.cbSize=sizeof(DOCINFO);
docinfo.lpszDocName="prnfile";
docinfo.lpszOutput=NULL;
docinfo.lpszDatatype=NULL;
docinfo.fwType=0;
if(cdc.StartDoc(&docinfo)==-1)return;
cdc.StartPage();
exOutReport(hPr,lpbi,lpdib);
cdc.EndPage();
cdc.EndDoc();
}
voidCOkMfcView::OnMouseMove(UINTnFlags,CPointpoint)
{
//TODO:/orcalldefault
RECT rcRect;
POINT pt;
int x,y;
char szString[100]={0};
if(bActive)
return;
rcRect.left=LOWORD(lScrnOffset);
rcRect.top=HIWORD(lScrnOffset);
rcRect.right=rcRect.left+lpbi->biWidth;
rcRect.bottom=rcRect.top+lpbi->biHeight;
MapWindowPoints((CWnd*)HWND_DESKTOP,(LPPOINT)&rcRect,2);
pt.x=point.x;
pt.y=point.y;
MapWindowPoints((CWnd*)HWND_DESKTOP,(LPPOINT)&pt,1);
x=pt.x-rcRect.left;
y=pt.y-rcRect.top;
if((x>=0)&&(x<lpbi->biWidth)&&(y>=0)&&(y<lpbi->biHeight))
{
WORD gray;
WORD r,g,b;
LPBYTE lpPixel;
long stride;
long form,bufform;
BYTE byBits;
char szSource[32];
//1.screen
form=okSetCaptureParam(hBoard,CAPTURE_SCRRGBFORMAT,GETCURRPARAM);//-1
byBits=(BYTE)HIWORD(form);
if(okGetCaptureStatus(hBoard,0)){//capturing
lpPixel=(LPBYTE)okGetTargetInfo(hBoard,SCREEN,0,NULL,NULL,&stride);
lpPixel+=pt.x*byBits/8+pt.y*stride;
strcpy(szSource,"SCREEN");
}
else{//forzen
//wbytes=((((lpbi->biWidth*bits)+31)&~31)>>3);//bmpneed4bytealign
byBits=(BYTE)lpbi->biBitCount;
stride=(lpbi->biWidth*byBits/8+3)/4*4;//dwordalign
lpPixel=(LPBYTE)lpdib+x*byBits/8+(lpbi->biHeight-y-1)*stride;
strcpy(szSource,"DIB");
}
if(byBits<=8){//8bits
gray=*lpPixel;
//gray=(BYTE)okReadPixel(hBoard,SCREEN,0,x,y-10);
//okWritePixel(hBoard,SCREEN,0,x,y-10,0x00ffff);
//sprintf(szString,"(%4i,%4i)=%s(%3i);",pt.x-rcRect.left,pt.y-rcRect.top,szSource,gray);
}
else{
WORD wPixel;
DWORD dwPixel;
if(LOWORD(form)==FORM_RGB555){
wPixel=((LPWORD)lpPixel)[0];
b=(wPixel&0x1f)<<3;
g=((wPixel>>5)&0x1f)<<3;
r=((wPixel>>10)&0x1f)<<3;
}
elseif(byBits==16){
wPixel=((LPWORD)lpPixel)[0];
b=(wPixel&0x1f)<<3;
g=((wPixel>>5)&0x3f)<<2;
r=((wPixel>>11)&0x1f)<<3;
}
elseif(byBits>=24){
dwPixel=((LPDWORD)lpPixel)[0];
//ShowCursor(0);//
//dwPixel=okReadPixel(hBoard,SCREEN,0,x,y);//$
//okWritePixel(hBoard,SCREEN,0,x,y,0x00ffff);//$
//ShowCursor(1);
b=(BYTE)(dwPixel&0xff);
g=(BYTE)(dwPixel>>8)&0xff;
r=(BYTE)(dwPixel>>16)&0xff;
}
sprintf(szString,"(%4i,%4i)=%s(%3i,%3i,%3i);",pt.x-rcRect.left,pt.y-rcRect.top,
szSource,r,g,b);
}
//2.buffer
bufform=okSetCaptureParam(hBoard,CAPTURE_BUFRGBFORMAT,GETCURRPARAM);//-1
if(LOWORD(bufform)!=LOWORD(form)){
long dwPixel;
dwPixel=okReadPixel(hBoard,BUFFER,-1,(short)x,(short)y);//readcurrentframe
switch(LOWORD(bufform)){
caseFORM_GRAY8:
caseFORM_GRAY888:
caseFORM_GRAY8888:
//dwPixel&=0xff;
caseFORM_GRAY10:
//dwPixel&=0x3ff;
caseFORM_GRAY12:
//dwPixel&=0xfff;
caseFORM_GRAY16://gray
//dwPixel&=0xffff;
sprintf(szString+strlen(szString),"BUFFER(%5i)",dwPixel);
break;
//color
caseFORM_RGB555:
b=(WORD)((dwPixel&0x1f)<<3);
g=(WORD)(((dwPixel>>5)&0x1f)<<3);
r=(WORD)(((dwPixel>>10)&0x1f)<<3);
sprintf(szString+strlen(szString),"BUFFER(%4i,%4i,%4i)",r,g,b);
break;
caseFORM_RGB888:
caseFORM_RGB8888:
caseFORM_RGB8886:
b=(WORD)(dwPixel&0xff);
g=(WORD)((dwPixel>>8)&0xff);
r=(WORD)((dwPixel>>16)&0xff);
if(LOWORD(bufform)==FORM_RGB8886){
b=(b<<2)|(WORD)((dwPixel>>24)&0x3);
g=(g<<2)|(WORD)((dwPixel>>26)&0x3);
r=(r<<2)|(WORD)((dwPixel>>28)&0x3);
}
sprintf(szString+strlen(szString),"BUFFER(%4i,%4i,%4i)",r,g,b);
break;
default:
//if(LOWORD(bufform)==FORM_RGB565){
b=(WORD)((dwPixel&0x1f)<<3);
g=(WORD)(((dwPixel>>5)&0x3f)<<2);
r=(WORD)(((dwPixel>>11)&0x1f)<<3);
sprintf(szString+strlen(szString),"BUFFER(%4i,%4i,%4i)",r,g,b);
break;
}
}
}
sBar->SetPaneText(0,szString);
return;
}
voidCOkMfcView::OnSyshelp()
{
//TODO:Addyourcommandhandlercodehere
//系統幫助
::WinHelp(hWnd,"okHelp.hlp",HELP_HELPONHELP,0);
}
voidCOkMfcView::OnCorr()
{
//TODO:Addyourcommandhandlercodehere
//相關內容
::WinHelp(hWnd,"okdemo.hlp",HELP_FINDER,0);
}
『肆』 C語言發送郵件
基本框架就是這,需棗坦仿要其他功能自己添加吧
C語凳纖言實現簡單的SMTP發送郵件信蠢
#include <windows.h>
#include <stdio.h>
#include <WinSock.h>
#include <iostream>
using namespace std;
#pragma comment(lib, "ws2_32.lib")
struct Base64Date6
{
unsigned int d4:6;
unsigned int d3:6;
unsigned int d2:6;
unsigned int d1:6;
};
// 協議中加密部分使用的是base64方法
char ConvertToBase64 (char c6);
void EncodeBase64 (char *dbuf, char *buf128, int len);
void SendMail (char *email,char *body);
int OpenSocket (struct sockaddr *addr);
int main()
{
char EmailTo[] = "[email protected]";
char EmailContents[] = "From: \"lucy\"<[email protected]>\r\n"
"To: \"dasiy\"<[email protected]>\r\n"
"Subject: Hello\r\n\r\n"
"Hello World, Hello Email!";
SendMail(EmailTo, EmailContents);
return 0;
}
char ConvertToBase64(char uc)
{
if(uc < 26)
{
return 'A' + uc;
}
if(uc < 52)
{
return 'a' + (uc - 26);
}
if(uc < 62)
{
return '0' + (uc - 52);
}
if(uc == 62)
{
return '+';
}
return '/';
}
// base64的實現
void EncodeBase64(char *dbuf, char *buf128, int len)
{
struct Base64Date6 *ddd = NULL;
int i = 0;
char buf[256] = {0};
char *tmp = NULL;
char cc = '\0';
memset(buf, 0, 256);
strcpy_s(buf, 256, buf128);
for(i = 1; i <= len/3; i++)
{
tmp = buf + (i-1)*3;
cc = tmp[2];
tmp[2] = tmp[0];
tmp[0] = cc;
ddd = (struct Base64Date6 *)tmp;
dbuf[(i-1)*4+0] = ConvertToBase64((unsigned int)ddd->d1);
dbuf[(i-1)*4+1] = ConvertToBase64((unsigned int)ddd->d2);
dbuf[(i-1)*4+2] = ConvertToBase64((unsigned int)ddd->d3);
dbuf[(i-1)*4+3] = ConvertToBase64((unsigned int)ddd->d4);
}
if(len % 3 == 1)
{
tmp = buf + (i-1)*3;
cc = tmp[2];
tmp[2] = tmp[0];
tmp[0] = cc;
ddd = (struct Base64Date6 *)tmp;
dbuf[(i-1)*4+0] = ConvertToBase64((unsigned int)ddd->d1);
dbuf[(i-1)*4+1] = ConvertToBase64((unsigned int)ddd->d2);
dbuf[(i-1)*4+2] = '=';
dbuf[(i-1)*4+3] = '=';
}
if(len%3 == 2)
{
tmp = buf+(i-1)*3;
cc = tmp[2];
tmp[2] = tmp[0];
tmp[0] = cc;
ddd = (struct Base64Date6 *)tmp;
dbuf[(i-1)*4+0] = ConvertToBase64((unsigned int)ddd->d1);
dbuf[(i-1)*4+1] = ConvertToBase64((unsigned int)ddd->d2);
dbuf[(i-1)*4+2] = ConvertToBase64((unsigned int)ddd->d3);
dbuf[(i-1)*4+3] = '=';
}
return;
}
// 發送郵件
void SendMail(char *email, char *body)
{
int sockfd = {0};
char buf[1500] = {0};
char rbuf[1500] = {0};
char login[128] = {0};
char pass[128] = {0};
WSADATA WSAData;
struct sockaddr_in their_addr = {0};
WSAStartup(MAKEWORD(2, 2), &WSAData);
memset(&their_addr, 0, sizeof(their_addr));
their_addr.sin_family = AF_INET;
their_addr.sin_port = htons(25);
hostent* hptr = gethostbyname("smtp.126.com");
memcpy(&their_addr.sin_addr.S_un.S_addr, hptr->h_addr_list[0], hptr->h_length);
printf("IP of smpt.126.com is : %d:%d:%d:%d\n",
their_addr.sin_addr.S_un.S_un_b.s_b1,
their_addr.sin_addr.S_un.S_un_b.s_b2,
their_addr.sin_addr.S_un.S_un_b.s_b3,
their_addr.sin_addr.S_un.S_un_b.s_b4);
// 連接郵件伺服器,如果連接後沒有響應,則2 秒後重新連接
sockfd = OpenSocket((struct sockaddr *)&their_addr);
memset(rbuf, 0, 1500);
while(recv(sockfd, rbuf, 1500, 0) == 0)
{
cout<<"reconnect..."<<endl;
Sleep(2);
sockfd = OpenSocket((struct sockaddr *)&their_addr);
memset(rbuf, 0, 1500);
}
cout<<rbuf<<endl;
// EHLO
memset(buf, 0, 1500);
sprintf_s(buf, 1500, "EHLO HYL-PC\r\n");
send(sockfd, buf, strlen(buf), 0);
memset(rbuf, 0, 1500);
recv(sockfd, rbuf, 1500, 0);
cout<<"EHLO REceive: "<<rbuf<<endl;
// AUTH LOGIN
memset(buf, 0, 1500);
sprintf_s(buf, 1500, "AUTH LOGIN\r\n");
send(sockfd, buf, strlen(buf), 0);
memset(rbuf, 0, 1500);
recv(sockfd, rbuf, 1500, 0);
cout<<"Auth Login Receive: "<<rbuf<<endl;
// USER
memset(buf, 0, 1500);
sprintf_s(buf, 1500, "[email protected]");//你的郵箱賬號
memset(login, 0, 128);
EncodeBase64(login, buf, strlen(buf));
sprintf_s(buf, 1500, "%s\r\n", login);
send(sockfd, buf, strlen(buf), 0);
cout<<"Base64 UserName: "<<buf<<endl;
memset(rbuf, 0, 1500);
recv(sockfd, rbuf, 1500, 0);
cout<<"User Login Receive: "<<rbuf<<endl;
// PASSWORD
sprintf_s(buf, 1500, "XXXXXXXXXXXX");//你的郵箱密碼
memset(pass, 0, 128);
EncodeBase64(pass, buf, strlen(buf));
sprintf_s(buf, 1500, "%s\r\n", pass);
send(sockfd, buf, strlen(buf), 0);
cout<<"Base64 Password: "<<buf<<endl;
memset(rbuf, 0, 1500);
recv(sockfd, rbuf, 1500, 0);
cout<<"Send Password Receive: "<<rbuf<<endl;
// MAIL FROM
memset(buf, 0, 1500);
sprintf_s(buf, 1500, "MAIL FROM: <[email protected]>\r\n");
send(sockfd, buf, strlen(buf), 0);
memset(rbuf, 0, 1500);
recv(sockfd, rbuf, 1500, 0);
cout<<"set Mail From Receive: "<<rbuf<<endl;
// RCPT TO 第一個收件人
sprintf_s(buf, 1500, "RCPT TO:<%s>\r\n", email);
send(sockfd, buf, strlen(buf), 0);
memset(rbuf, 0, 1500);
recv(sockfd, rbuf, 1500, 0);
cout<<"Tell Sendto Receive: "<<rbuf<<endl;
// DATA 准備開始發送郵件內容
sprintf_s(buf, 1500, "DATA\r\n");
send(sockfd, buf, strlen(buf), 0);
memset(rbuf, 0, 1500);
recv(sockfd, rbuf, 1500, 0);
cout<<"Send Mail Prepare Receive: "<<rbuf<<endl;
// 發送郵件內容,\r\n.\r\n內容結束標記
sprintf_s(buf, 1500, "%s\r\n.\r\n", body);
send(sockfd, buf, strlen(buf), 0);
memset(rbuf, 0, 1500);
recv(sockfd, rbuf, 1500, 0);
cout<<"Send Mail Receive: "<<rbuf<<endl;
// QUIT
sprintf_s(buf, 1500, "QUIT\r\n");
send(sockfd, buf, strlen(buf), 0);
memset(rbuf, 0, 1500);
recv(sockfd, rbuf, 1500, 0);
cout<<"Quit Receive: "<<rbuf<<endl;
//清理工作
closesocket(sockfd);
WSACleanup();
return;
}
// 打開TCP Socket連接
int OpenSocket(struct sockaddr *addr)
{
int sockfd = 0;
sockfd=socket(PF_INET, SOCK_STREAM, 0);
if(sockfd < 0)
{
cout<<"Open sockfd(TCP) error!"<<endl;
exit(-1);
}
if(connect(sockfd, addr, sizeof(struct sockaddr)) < 0)
{
cout<<"Connect sockfd(TCP) error!"<<endl;
exit(-1);
}
return sockfd;
}
『伍』 用C語言寫一個郵件收發程序,不知道該怎麼做!求大神指導!
你可以用smtp協議來發送郵件
用pop3來接收郵件晌咐
具體發送的代碼全是api函數,直接調用宴納純就行了
想加界面的話用c++的mfc或者調用api建窗茄肆口
網路搜都有的
『陸』 C語言郵件程序 如何發送附件
C語言發送郵件 完整代碼:
#include<windows.h>
#include<stdio.h>
#include<WinSock.h>
#include<iostream>
usingnamespacestd;
#pragmacomment(lib,"ws2_32.lib")
structBase64Date6
{
unsignedintd4:6;
unsignedintd3:6;
unsignedintd2:6;
unsignedintd1:6;
};
//協議中加密部分使用的是base64方法
charConvertToBase64(charc6);
voidEncodeBase64(char*dbuf,char*buf128,intlen);
voidSendMail(char*email,char*body);
intOpenSocket(structsockaddr*addr);
intmain()
{
charEmailTo[]="[email protected]";
charEmailContents[]="From:"lucy"<[email protected]> "
"To:"dasiy"<[email protected]> "
"Subject:Hello "
"HelloWorld,HelloEmail!"
//"DATA "//告訴伺服器下面是郵件
//下面是郵件頭
"TO:[email protected] "
"FROM:[email protected] "
"SUBJECT:SMTP協議測試 "
"Date:2015-04-20 "
"X-Mailer:fice'smailer "
"MIMI-Version:1.0 "
"Content-Type:multipart/mixed;boundary="#BOUNDARY#" "//設置邊界值,區分郵件內容的兩個回車換行
"Content-Transfer-Encoding:7bit "
"Thisisamulti-partmessageinMIMEformat "
//發送郵件內容頭部信息
"--#BOUNDARY# "
"Content-Type:text/plain;charset=gb2312 "
"Content-Transfer-Encoding:printable "
//發送郵件的內容部分
"SMTP協議測試:發送附件/n----byfice2015.04.20 "
//發送附件頭部信息
"--#BOUNDARY# "
"Content-Type:text/plain;name=student.txt "
"Content-Transfer-Encoding:base64 "
"Content-Disposition:attachment;filename="test.txt" ";
SendMail(EmailTo,EmailContents);
return0;
}
charConvertToBase64(charuc)
{
if(uc<26)
{
return'A'+uc;
}
if(uc<52)
{
return'a'+(uc-26);
}
if(uc<62)
{
return'0'+(uc-52);
}
if(uc==62)
{
return'+';
}
return'/';
}
//base64的實現
voidEncodeBase64(char*dbuf,char*buf128,intlen)
{
structBase64Date6*ddd=NULL;
inti=0;
charbuf[256]={0};
char*tmp=NULL;
charcc='