¿Puede proporcionar el código VC para enviar el correo electrónico? es mejor tener comentarios
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)
{ p >
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"); p>
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); p >
}
}
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
{ p>
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)
{ p>
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;
}
} p>
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;
} p>
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"); } p> // 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: 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 p > 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 } p> //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) p> { devolver 0; } if(recvdata()==0) { p> 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> 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; }