Red de conocimientos turísticos - Conocimientos sobre calendario chino - ¿Puede proporcionar el código VC para enviar el correo electrónico? es mejor tener comentarios

¿Puede proporcionar el código VC para enviar el correo electrónico? es mejor tener comentarios

Solo existe el código principal y el programa es un todo. Si desea compilarlo directamente, debe enviarlo completo.

Puedes cambiarlo tú mismo

int CMail. ::sendmail()

{

int crecv;

if(smtplogin()==0)

//Enviar correo electrónico desde retorno a mail.p> {

Devolver 0;

}

//Devolver 250 para enviar correo

sprintf(m_sendbuff," %s%s%s", "correo de:<",m_user,"@163.com>\r\n");

if(senddata( )==0)

{

devolver 0;

}

if(recvdata()==0)

{

devuelve 0;

}

if(strncmp(m_ recvbuff, "250",3)!=NULL)

{

m_error=MAIL_FROM_ERROR;

Devuelve 0;

}

// enviar rcpt para devolver 250

sprintf(m_sendbuff,"%s%s%s", "rcpt to:<",m_rcptto,">\r\n");

if(senddata()==0)

{

devuelve 0;

}

if(recvdata()==0 )

{

return 0;

}

if(strncmp(m_recvbuff, "250",3)!=NULL)

{

m_error=RCPT_TO_ERROR;

Devuelve 0;

}

//Enviar datos/r/n Devolver 354

sprintf(m_sendbuff,"%s", "data\r\n ");

if(senddata()== 0)

{

devolver 0;

}

if(recvdata()==0)

{

return 0;

}

if(strncmp (m_recvbuff, "354",3)! =NULL)

{

m_error=DATA_ERROR;

Devuelve 0;

}

if(!SetMailHeader(m_sendbuff))

{

m_ error=MAILHEADER_ERROR;

devuelve 0;

}

if(senddata()==0)

{

devuelve 0;

}

//Enviar una línea en blanco

sprintf(m _sendbuff,"%s","\r\n\r\n");

if( enviar datos ()==0)

{

devolver 0;

}

//Enviar texto de correo electrónico

sprintf(m_sendbuff,"%s%s ",m_data,"\r\n");

if(senddata()==0)

{

devolver 0;

}

if(m_attachment!=NULL)

{

char **pp;

for(pp=m_attachment;*pp!=0;pp++)

{

ARCHIVO* fp;

char *buf;

// Al prepararse para enviar archivos adjuntos, ¡la línea divisoria debe enviarse primero!

sprintf(m_sendbuff,"%s%s%s","--",BOUNDARY_TEXT,"\r\n");

if(senddata()==0 )

{

return 0;

}

sprintf(m_sendbuff,"%s%s%s", "Contenido- Escriba: ",strrchr(*pp,'\\')+1,"\"\r\n");

if(senddata()==0)

{

Devuelve 0;

}

sprintf(m_sendbuff,"%s", "Codificación de transferencia de contenido: base64\r\n");

if(senddata()==0)

{

Devuelve 0

}

sprintf; (m_sendbuff,"%s%s%s", "Disposición de contenido: archivo adjunto; filename=\"",strrchr(*pp,'\\')+1,"\" \r\n");

if(senddata()==0)

{

return 0;

}

//Enviar archivo codificado en base64

fp=fopen(*pp, "rb");

if(fp== NULL)

{

m_error=OPEN_FILE_ERROR;

devuelve 0;

}

buf=nuevo carácter[BUFFERSIZE+1];

memset( buf ,0,BUFFERSIZE +1);

int readcount=0;

while(!feof(fp))

{

readcount=fread(buf,1,BUFFERSIZE,fp);

if(readcount>0)

{

*(buf+readcount)=' 0 ';

sprintf(m_sendbuff,"%s%s",base64(buf,ENCODE,readcount),"\r\n");

if(senddata() = =0)

{

return 0;

}

memset(buf,0,BUFFERSIZE+1);

}

}

sprintf(m_sendbuff,"%s","\r\n");

if( senddata() = =0)

{

re

girar 0;

}

eliminar[] buf;

fclose(fp);

}

if(m_attachment!=NULL)

{

//adjunto enviado, dividir remitente

sprintf(m_sendbuff,"%s%s%s"," --",BOUNDARY_TEXT,"--\r\n");

if(senddata()==0)

{

devuelve 0;

}

}

// Enviar.\r\n end return 250

sprintf(m_sendbuff,"%s", ". \r\n");

if(senddata()==0)

{

devuelve 0;

}

crecv=recv(s,m_recvbuff,MAX_LENGTH,0);

if(strncmp(m_ recvbuff, "250",3)!=NULL)

{

m_error=END_DATA_ERROR;

Devuelve 0;

}

más

{

showmessage(NULL, "El correo electrónico se envió correctamente","",NULL);

}

//Salir

sprintf( m_sendbuff,"%s", "salir\r\n");

if(senddata()==0)

{

regresar 0;

}

if( closesocket(s)!= 0)

{

m_error=CLOSE_SOCKET_ERROR;

Devuelve 0;

}

if( WSACleanup()!= 0)

{

m_error=CLEANUP_WSA_ERROR;

Devuelve 0;

}

Devuelve 1;

}

int CMail::senddata()

{

int idx = 0;

int csend;

int count=strlen(m_sendbuff);

while(count> ; 0 )

{

if((csend=send(s,m_sendbuff+ idx,count,0))==SOCKET_ERROR)

{

m_error =WSA_SEND_ERROR;

Devuelve 0;

}

if(csend==0)

{

descanso;<

}

count-=csend;

idx+=csend;

}

Devolver 1;

}

int CMail::recvdata()

{

int crecv;

crecv=recv(s,m_recvbuff,MAX_LENGTH,0);

if(crecv==SOCKET_ERROR

)

{

m_error =WSA_RECV_ERROR;

devuelve 0;

}

si no (crecv= =0)

{

m_error =WSA_RECV_ERROR;

devuelve 0;

}

}

else

{

}

devolver 1;

}

int CMail::chartoindex(char c)

{

if(c>=65&&c<=90)

{

c-=65;

}

si no( c>=97&&c<=122)

{

c-=71 ;

}

si(c>=48&&c<=57)

{

c+=4;

}

else if(c==43)//'+'

{

c=62; }

si(c==47)//'/'

{

c=63;

}

else if(c==61)//'='

{

c=0

}

<; p> else

{

m_error=DECODE_ERROR;

devuelve 0;

}

devuelve c;

}

bool CMail::SetMailHeader(char* header)

{

// "Fecha:", "De: ", "Para:",

// "ID del mensaje:", "Asunto:", "Versión MIME:",

// "Tipo de contenido:" , "X-Priority:",

// "X-Mailer:", "X-CM-TRANSID:", "X-CM-SenderInfo:",

/ / "X-Coremail-Antispam:","\r\n\r\n"

TCHAR szDate[500];

TCHAR sztTime[500];

// Fecha:

SYSTEMTIME st={0};

::GetSystemTime(&st);

::GetDateFormat(MAKELCID(0x0409,SORT_DEFAULT),0,&st, "ddd\',\' dd MMM yyyy",szDate,sizeof(szDate));

::GetTimeFormat(

MAKELCID(0x0409,SORT_DEFAULT),TIME_FORCE24HOURFORMAT,&st, "HH\':\'mm\':\'ss",sztTime,sizeof(sztTime));

sprintf(header," Fecha: % s %s\r\n", szDate, sztTime);

// De: "<" "<"

if(m_mailfrom!=NULL)

{

strcat(encabezado, "De: ");

strcat(encabezado , " <");

strcat(encabezado,m_mailfrom);

strcat(encabezado, ">\r\n");

}

// X-Mailer:

if(m_xmailer!= NULL)

{

strcat(encabezado, "X-Mailer: ");

strcat(encabezado, m_xmailer);

strcat(encabezado, "\r\n");

}

// Prioridad X:

switch(m_priority)

{

caso XPRIORITY_HIGH:

strcat(header, "X-Priority:2 (Alta)\r\n" );

break;

caso XPRIORITY_NORMAL :

strcat(header, "X-Priority: 3 (Normal)\r\n");

break;

case XPRIORITY_LOW.

strcat(header, "Prioridad X: 4 (baja)/r\n");

break;

predeterminado:

strcat (encabezado, "Prioridad X: 3 (Normal)/r\n");

}

// Para:

if(m_rcptto! =NULL)

{

strcat(encabezado, "Para: ");

strcat(encabezado, m_rcptto);

strcat (encabezado, "\rr\n");

}

// Asunto:

if( m_subject! =NULL)

{

strcat(encabezado, "Asunto: ");

strcat(encabezado, m_subject);

> strcat(encabezado, "\r\n");

}

// Versión MIME: 1.0

strcat( encabezado, "MIME-Versión: 1.0\r\n");

//adjunto

if(m_attachment= =NULL)

{ //if sin archivos adjuntos

strcat(header, "Content-type: text/plain; charset=GB2312\r\n");

strcat(header, "Content-Transfer-Encoding: 7bit\r\n");

strcat(header,"\r\n");

}

else

{ //Si hay archivos adjuntos, establezca el divisor, cada segmento secundario comienza con una línea --BOUNDARY_TEXT y el segmento principal termina con una línea --BOUNDARY_TEXT-- line.TEXT--, separados por una línea en blanco

strcat(encabezado, "Tipo de contenido: multipart/mixed;border="");

strcat(encabezado,BOUNDARY_TEXT);

strcat(encabezado," \" \n");

strcat(header,"\r\n");// Esta línea en blanco no puede faltar

// La primera parte es el contenido del texto

strcat(header,"--");strcat(header,BOUNDARY_ TEXT);strcat(header,"\r\n");//Agregar línea divisoria

//El siguiente El contenido es el mismo que sin archivos adjuntos

strcat(header, "Content-type: text/plain; charset=GB2312\r\n");//Tenga en cuenta que GB2312 o el chino serán confusos

strcat(header, "Content-Transfer-Encoding: 7bit\r\n");

}

// listo

devolver verdadero

}

int CMail::senddata()

{

int idx = 0;

int csend;

int count=strlen(m_sendbuff);

while(count>0)

{

si ((csend =send(s,m_sendbuff+idx,count,0))==SOCKET_ERROR)

{

m_error =WSA_SEND_ERROR;

Devuelve 0;

}

if (csend==0)

{

descanso;

}

count-=csend;

idx+=csend;

}

Devuelve 1;

}

int CMail: .recvdata()

{

int crecv;

crecv=recv(s,m_recvbuff,MAX_LENGTH,0);

if(crecv==SOCKET_ERROR)

{

m_ error =WSA_RECV_ERROR;

devuelve 0;

}

si(crecv==0)

{

m_error=WSA_RECV_ERROR;

devuelve 0;

}

más

{

}

devuelve 1 ;

}

int CMail::smtplogin()

{

if(connect()==0)<

{

devolver

}

if(recvdata()==0)

{

devuelve 0;

}

if(strstr(m_recvbuff, "220")==NULL)// 220

{

m_error=UNKNOWN_ERROR

Devuelve 0

}

//enviar helo devuelve 250

sprintf(m_sendbuff,"%s", "helo 543880135\ r\n");

if(senddata()= =0)

{

devolver 0;

}

if(recvdata()==0)

{

devolver 0;

}

if( strncmp(m_recvbuff, "250",3)!=NULL)

{

m_error=HELO_ERROR;

Devuelve 0;

}

//enviar inicio de sesión de autenticación devuelve 334

sprintf(m_sendbuff,"%s", "auth login\ r\n");

if(senddata()==0)

{

devolver 0;

}

if(recvdata()==0)

{

devolver 0;

}

if( strncmp(m_recvbuff, "334",3)! =NULL)

{

m_error=AUTH_LOGIN_ERROR;

Devuelve 0;

}

//Enviar nombre de usuario codificado en base64, devolver 334

sprintf(m_sendbuff, "% s%s",base64(m_user,ENCODE,strlen(m_user)),"\r\n ") ;

if(senddata()==0)

{

devuelve 0;

}

if(recvdata()==0)

{

re

turno 0;

}

if(strncmp(m_recvbuff, "334",3)!=NULL)

{

m_error =USER_ERROR;

Devuelve 0;

}

//Envía la contraseña codificada en base64 y devuelve 235

sprintf(m_sendbuff,"%s%s", base64(m_pass,ENCODE,strlen(m_pass)),"\r\n");

if(senddata()==0)

{

devolver 0;

}

if(recvdata()==0)

{

devolver 0;

}

if(strncmp(m_recvbuff, "235",3)!=NULL)

{

m_error=PASS_ERROR;

Devuelve 0;

}

Devuelve 1;

}

int CMail::connect()

{

WSADATA wsadata;

struct sockaddr_in sock_addr;

HOSTENT *phostent; p>

struct in_addr inaddr;

if(WSAStartup(MAKEWORD( 1,1),&wsadata)<0)

{

m_error =WSA_INIT_ERROR ;

Devuelve 0;

}

//*--------------- Obtener la dirección de red según el nombre de dominio, el nombre de dominio se almacena en la estructura in_addr de ----------------*

phostent=gethostbyname(m_server);//pop .163.com

if(phostent!=NULL)

{

// lpAddr= phostent->h_addr_list[0];

memmove(&inaddr,phostent-> h_addr_list[0],4);//220.181.12.101

}

else

{

m_error= CONNECTSERVER_ERROR;

devuelve 0;

}

/*------------ --- Obtenga la dirección de red según el nombre de dominio, almacenada en struct in_addr ----------------*/

s=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//SOCK_STREAM SOCK_DGRAM

sock_addr.sin_family=AF_INET;

sock_addr.sin_port =htons(m_port);

sock_addr.sin_addr=inaddr;/ / asignación directa de estructura a estructura, o escriba: sock_addr.sin_addr .s_addr=inaddr.S_un.S_addr;

>

if(:. connect(s,(struct sockaddr *)&sock_addr,sizeof(sock_addr)))

{

m_error=CONNECT_ERROR;

devolver 0;

}

devolver 1;

}

lass="endnav">

Copyright 2024 Red de conocimientos turísticos All Rights Reserved.