當前位置:首頁 » 編程語言 » 編寫發送接受郵件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()等等函數必須知道