当前位置:首页 » 编程语言 » 编写发送接受邮件c语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

编写发送接受邮件c语言

发布时间: 2023-03-18 14:21:15

‘壹’ 邮件发送程序客户端(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='';

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=(structBase64Date6*)tmp;
dbuf[(i-1)*4+0]=ConvertToBase64((unsignedint)ddd->d1);
dbuf[(i-1)*4+1]=ConvertToBase64((unsignedint)ddd->d2);
dbuf[(i-1)*4+2]=ConvertToBase64((unsignedint)ddd->d3);
dbuf[(i-1)*4+3]=ConvertToBase64((unsignedint)ddd->d4);
}
if(len%3==1)
{
tmp=buf+(i-1)*3;
cc=tmp[2];
tmp[2]=tmp[0];
tmp[0]=cc;
ddd=(structBase64Date6*)tmp;
dbuf[(i-1)*4+0]=ConvertToBase64((unsignedint)ddd->d1);
dbuf[(i-1)*4+1]=ConvertToBase64((unsignedint)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=(structBase64Date6*)tmp;
dbuf[(i-1)*4+0]=ConvertToBase64((unsignedint)ddd->d1);
dbuf[(i-1)*4+1]=ConvertToBase64((unsignedint)ddd->d2);
dbuf[(i-1)*4+2]=ConvertToBase64((unsignedint)ddd->d3);
dbuf[(i-1)*4+3]='=';
}
return;
}
//发送邮件
voidSendMail(char*email,char*body)
{
intsockfd={0};
charbuf[1500]={0};
charrbuf[1500]={0};
charlogin[128]={0};
charpass[128]={0};
WSADATAWSAData;
structsockaddr_intheir_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("IPofsmpt.126.comis:%d:%d:%d:%d ",
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((structsockaddr*)&their_addr);
memset(rbuf,0,1500);
while(recv(sockfd,rbuf,1500,0)==0)
{
cout<<"reconnect..."<<endl;
Sleep(2);
sockfd=OpenSocket((structsockaddr*)&their_addr);
memset(rbuf,0,1500);
}

cout<<rbuf<<endl;

//EHLO
memset(buf,0,1500);
sprintf_s(buf,1500,"EHLOHYL-PC ");
send(sockfd,buf,strlen(buf),0);
memset(rbuf,0,1500);
recv(sockfd,rbuf,1500,0);
cout<<"EHLOREceive:"<<rbuf<<endl;

//AUTHLOGIN
memset(buf,0,1500);
sprintf_s(buf,1500,"AUTHLOGIN ");
send(sockfd,buf,strlen(buf),0);
memset(rbuf,0,1500);
recv(sockfd,rbuf,1500,0);
cout<<"AuthLoginReceive:"<<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 ",login);
send(sockfd,buf,strlen(buf),0);
cout<<"Base64UserName:"<<buf<<endl;
memset(rbuf,0,1500);
recv(sockfd,rbuf,1500,0);
cout<<"UserLoginReceive:"<<rbuf<<endl;

//PASSWORD
sprintf_s(buf,1500,"********");//你的邮箱密码
memset(pass,0,128);
EncodeBase64(pass,buf,strlen(buf));
sprintf_s(buf,1500,"%s ",pass);
send(sockfd,buf,strlen(buf),0);
cout<<"Base64Password:"<<buf<<endl;

memset(rbuf,0,1500);
recv(sockfd,rbuf,1500,0);
cout<<"SendPasswordReceive:"<<rbuf<<endl;

//MAILFROM
memset(buf,0,1500);
sprintf_s(buf,1500,"MAILFROM:<[email protected]> ");
send(sockfd,buf,strlen(buf),0);
memset(rbuf,0,1500);
recv(sockfd,rbuf,1500,0);
cout<<"setMailFromReceive:"<<rbuf<<endl;

//RCPTTO第一个收件人
sprintf_s(buf,1500,"RCPTTO:<%s> ",email);
send(sockfd,buf,strlen(buf),0);
memset(rbuf,0,1500);
recv(sockfd,rbuf,1500,0);
cout<<"TellSendtoReceive:"<<rbuf<<endl;

//DATA准备开始发送邮件内容
sprintf_s(buf,1500,"DATA ");
send(sockfd,buf,strlen(buf),0);
memset(rbuf,0,1500);
recv(sockfd,rbuf,1500,0);
cout<<"SendMailPrepareReceive:"<<rbuf<<endl;

//发送邮件内容, . 内容结束标记
sprintf_s(buf,1500,"%s . ",body);
send(sockfd,buf,strlen(buf),0);//发送邮件,不带附件的内容

//用二进制方式读取附件文件内容并转为base64格式
FILE*pf=fopen("D:\test.txt","rb");
fseek(pf,0,SEEK_END);
intfilelen=ftell(pf);
char*filebuf=(char*)malloc(filelen);
char*filebase64=(char*)malloc(filelen*2);
memset(filebase64,0,filelen*2);
fseek(pf,0,SEEK_SET);
fread(filebuf,1,filelen,pf);
EncodeBase64(filebase64,filebuf,filelen);

send(sockfd,filebase64,strlen(filebase64),0);//发送邮件的内容
memset(rbuf,0,1500);
recv(sockfd,rbuf,1500,0);
cout<<"SendMailReceive:"<<rbuf<<endl;

//QUIT
sprintf_s(buf,1500,"QUIT ");
send(sockfd,buf,strlen(buf),0);
memset(rbuf,0,1500);
recv(sockfd,rbuf,1500,0);
cout<<"QuitReceive:"<<rbuf<<endl;

//清理工作
closesocket(sockfd);
WSACleanup();
return;
}
//打开TCPSocket连接
intOpenSocket(structsockaddr*addr)
{
intsockfd=0;
sockfd=socket(PF_INET,SOCK_STREAM,0);
if(sockfd<0)
{
cout<<"Opensockfd(TCP)error!"<<endl;
exit(-1);
}
if(connect(sockfd,addr,sizeof(structsockaddr))<0)
{
cout<<"Connectsockfd(TCP)error!"<<endl;
exit(-1);
}
returnsockfd;
}

‘柒’ C语言编程 假设邮局规定寄邮件时若每件重量在1公斤以内(含1公斤),按每公斤1.5元计算

#include "stdio.h"
void main()
{
float a,b;
printf("请输入橘键芹亮斗包裹的重量(公斤):\n");
scanf("%f"圆毕,&a);
if(a<=1)
b=1.5;
else
{
b=1.5+(a-1)*0.8;
}
printf("此包裹的邮费为:%.2f元",b);
}

‘捌’ 请问学习C语言哪些方面的内容可以编写最简易的收发邮件的客户端(smtp/pop3协议)

学习网络通讯协议 ,还有一些基础的编程知识,socket通讯 ,了解协议的初始化,

‘玖’ C语言编写邮件地址

int mail(char *s)
{
char p;
p = '@';
if(!memchr(s,p,strlen(s)))
return 0;
p = '.';
if(!memchr(s,p,strlen(s)))
return 0;
if(!strstr(s,"com")&&!strstr(s,"not")&&!strstr(s,"e")&&!strstr(s,"org")&&!strstr(s,"mil"))
return 0;
return 1;
}

‘拾’ 用C语言对话框程序怎么发电子邮件啊

你可以写个程序,学过网络编程吗,没有学过就算了,scoket()等等函数必须知道