Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: Làm thế nào để gửi mail tới gmail trong lập trình C?

  1. #1
    Ngày gia nhập
    01 2011
    Bài viết
    4

    Thumbs down Làm thế nào để gửi mail tới gmail trong lập trình C?

    Chào các bác,
    em đang muốn viết một chương trình nhỏ với mục tiêu là gửi 1 email đến một người dùng ở gmail, chỉ dùng C (em chưa học C#). Chương trình của em không phải mail - client đầy đủ, chỉ cần gửi mail đến địa chỉ đã chỉ ra là được.

    Em đã viết một đoạn như dưới đây, nhưng rất tiếc là check mail hoài không thấy,
    Xin các bác giúp đỡ, chỉ xem em bị sai chỗ nào với ạ.
    Cảm ơn các bác rất nhiều.

    Visual C++ Code:
    1. #include <conio.h>
    2. #include <stdio.h>
    3. #include <WinSock2.h>
    4. #include <ws2tcpip.h>
    5.  
    6. #pragma comment (lib, "Ws2_32.lib")
    7. #pragma comment (lib, "Mswsock.lib")
    8. #pragma comment (lib, "AdvApi32.lib")
    9.  
    10. #define DEFAULT_BUFLEN 512
    11. #define DEFAULT_PORT "25"
    12. #define SMTP_SERVER "smtp.gmail.com"
    13.  
    14.  
    15. int sendData(SOCKET socket, char *data){
    16.     int iResult;
    17.     iResult = send(socket, data, (int)strlen(data), 0);
    18.     if(iResult == SOCKET_ERROR){
    19.         printf("send failed. Error: %d\n", WSAGetLastError());
    20.     } else {
    21.         printf("Send %d bytes.\n", iResult);
    22.     }
    23.  
    24.     return iResult;
    25. }
    26.  
    27.  
    28. int __cdecl main()
    29. {
    30.     WSADATA wsaData;
    31.     SOCKET ConnectSocket = INVALID_SOCKET;
    32.     struct addrinfo *result = NULL,
    33.         *ptr = NULL,
    34.         hints;
    35.    
    36.     char recvbuf[DEFAULT_BUFLEN];
    37.     int iResult;
    38.     int recvbuflen = DEFAULT_BUFLEN;
    39.  
    40.     // Initialize Winsock
    41.     iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
    42.     if (iResult != 0) {
    43.         printf("WSAStartup failed with error: %d\n", iResult);
    44.         return 1;
    45.     } else {
    46.         printf("WSAStartup done\n");
    47.     }
    48.  
    49.     ZeroMemory( &hints, sizeof(hints) );
    50.     hints.ai_family = AF_UNSPEC;
    51.     hints.ai_socktype = SOCK_STREAM;
    52.     hints.ai_protocol = IPPROTO_TCP;
    53.  
    54.     // Resolve the server address and port
    55.     iResult = getaddrinfo(SMTP_SERVER, DEFAULT_PORT, &hints, &result);
    56.     if ( iResult != 0 ) {
    57.         printf("getaddrinfo failed with error: %d\n", iResult);
    58.         WSACleanup();
    59.         return 1;
    60.     } else {
    61.         printf("getaddrinfo done\n");
    62.     }
    63.  
    64.     // Attempt to connect to an address until one succeeds
    65.     for(ptr=result; ptr != NULL ;ptr=ptr->ai_next) {
    66.  
    67.         // Create a SOCKET for connecting to server
    68.         ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype,
    69.             ptr->ai_protocol);
    70.         if (ConnectSocket == INVALID_SOCKET) {
    71.             printf("socket failed with error: %ld\n", WSAGetLastError());
    72.             WSACleanup();
    73.             return 1;
    74.         }
    75.  
    76.         // Connect to server.
    77.         iResult = connect( ConnectSocket, ptr->ai_addr, (int)ptr->ai_addrlen);
    78.         if (iResult == SOCKET_ERROR) {
    79.             closesocket(ConnectSocket);
    80.             ConnectSocket = INVALID_SOCKET;
    81.             continue;
    82.         }
    83.         break;
    84.     }
    85.  
    86.     freeaddrinfo(result);
    87.  
    88.     if (ConnectSocket == INVALID_SOCKET) {
    89.         printf("Unable to connect to server!\n");
    90.         WSACleanup();
    91.         return 1;
    92.     } else {
    93.         printf("Connected to server.\nNow send...\n");
    94.     }
    95.    
    96.  
    97.     sendData(ConnectSocket, "HELO keylogger@hust.edu.vn\n");
    98.     sendData(ConnectSocket, "MAIL FROM:<keylogger@hust.edu.vn>\n");
    99.     sendData(ConnectSocket, "RCPT TO: <receipient@gmail.com>\n");
    100.     sendData(ConnectSocket, "DATA\n");
    101.     sendData(ConnectSocket, "Chu de Thu nghiem\n\n");
    102.     sendData(ConnectSocket, "Va day la noi dung thu nghiem\n");
    103.     sendData(ConnectSocket, "\r\n.\r\n");
    104.     sendData(ConnectSocket, "quit\n");
    105.  
    106.     printf("\nDone\n");
    107.  
    108.     getch();
    109. }
    Đã được chỉnh sửa lần cuối bởi MrLoyal : 14-04-2012 lúc 04:45 PM.

  2. #2
    Ngày gia nhập
    04 2010
    Nơi ở
    Binh Thanh, Hồ Chí Minh, Vietnam, Vietnam
    Bài viết
    504

    gmail dùng giao thức SMTP + SSL còn gọi là ESMPT bổ sung thêm nhiều lệnh và kết nối SSL. Như vậy, muốn gửi email bằng hộp thư gmail thông qua giao thức SMTP thì bạn phải dùng kết nối SSL, chứ không kết nối như trên được. Kệt nối SSL có thể dùng thư viện OpenSSL cho đơn giản.
    Kết bạn với tôi <3
    Skype: giautm
    Facebook:
    https://fb.com/giautm.duongntt
    Email:
    giau.tmg@gmail.com

  3. #3
    Ngày gia nhập
    01 2011
    Bài viết
    4

    Cảm ơn bác doicanhden.

  4. #4
    Ngày gia nhập
    12 2009
    Bài viết
    8

    Mặc định Lỗi không gửi được mail ?

    mọi người xem giúp mình với, không hiểu sao nó chạy nhưng vẫn không gửi được mail..
    Code:
    #pragma comment(lib, "Ws2_32.lib")
    #include <iostream>
    #include <conio.h>
    #include <WinSock2.h>
    #include <Windows.h>
    
    using namespace std;
    
    int sendmail(SOCKET Connection){
              
       
       
       send(Connection, "helo platter.wordtothewise.com\n", strlen("helo platter.wordtothewise.com\n"),0);
       recv(Connection,Buffer,sizeof(Buffer),0);
       
       cout<<Buffer<<endl;
    
           
       
       send(Connection, "MAIL FROM:<steve@blighty.com>\r\n", strlen("MAIL FROM:<steve@blighty.com>\r\n"),0);
       recv(Connection,Buffer,sizeof(Buffer),0);
       
       cout<<Buffer<<endl;
       
       send(Connection, "RCPT TO:<neptune.dqv@gmail.com>\r\n", strlen("RCPT TO:<neptune.dqv@gmail.com>\r\n"),0);
       recv(Connection,Buffer,sizeof(Buffer),0);
       
       cout<<Buffer<<endl;
       
       send(Connection, "DATA\r\n", strlen("DATA\r\n"),0);
       recv(Connection,Buffer,sizeof(Buffer),0);
       
       cout<<Buffer<<endl;
       
       
       send(Connection, "From:<steve@blighty.com>\r\n", strlen("From:<steve@blighty.com>\r\n"),0);
       send(Connection, "To:<neptune.dqv@gmail.com>\r\n", strlen("To:<neptune.dqv@gmail.com>\r\n"),0);
       send(Connection, "Subject: Thong bao\r\n", strlen("Subject: Thong bao\r\n"),0);
       
       send(Connection, "\r\n", strlen("\r\n"),0);
       send(Connection, "Chao ban, chuc ban mot ngay moi tot lanh.", 128,0);
       send(Connection, "\r\n.\r\n", 50,0);
       
       
       recv(Connection, Buffer, sizeof(Buffer), 0);
       
       cout<<Buffer<<endl;
       
       send(Connection, "QUIT\r\n", strlen("QUIT\r\n"),0);
       
       recv(Connection, Buffer, sizeof(Buffer), 0);   
      
       cout<<Buffer<<endl;
          
       
       return 0;
    }
    
    
    int main()
    {
    	SOCKET socKet;
    	WSADATA wsaData;
    	struct hostent* host;
    	struct sockaddr_in Addr;
    	if(WSAStartup(0x0202,&wsaData)==SOCKET_ERROR)
    	{
    		cout<<"\nLoi 1.............."<<endl;
    		WSACleanup();
    		return -1;
    	}
    
    	if((host=gethostbyname("gmail-smtp-in.l.google.com"))==NULL)
    	{
    		cout<<"\nLoi 2................"<<endl;
    		exit(1);
    	}
    
    	memset(&Addr,0,sizeof(Addr));
    	memcpy(&Addr.sin_addr,host->h_addr,host->h_length);
    
    	Addr.sin_family = host->h_addrtype;
    	Addr.sin_port = htons(25);
    
    	if((socKet=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))<0)
    	{
    		cout<<"\nLoi 3.................."<<endl;
    		exit(1);
    	}
    
    	if(connect(socKet,(struct sockaddr*)&Addr,sizeof(Addr))==-1)
    	{
    		cout<<"\nLoi 4..................."<<endl;
    		exit(1);
    	}
    
    	sendmail(socKet);
    
    	getchar();
    	return 0;
    }

Các đề tài tương tự

  1. Làm thế nào đẻ send mail từ yahoo sang gmail trên winform
    Gửi bởi noisim89 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 06-02-2012, 06:42 PM
  2. Phần mềm gửi lỗi của app vào gmail của mình. Xây dựng như thế nào???
    Gửi bởi cchangkhongayngo trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 11
    Bài viết cuối: 11-09-2011, 12:14 AM
  3. Gửi mail với SMTP chứng thực với Gmail
    Gửi bởi sunflower trong diễn đàn Tutorials và Thủ thuật lập trình C#, ASP.NET
    Trả lời: 4
    Bài viết cuối: 09-04-2010, 11:30 PM
  4. Làm sao để duyệt được mail của yahoo hoặc gmail với C#??
    Gửi bởi #include# trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 24-10-2009, 03:59 AM
  5. Block 1 e-mail trong gmail
    Gửi bởi nthung trong diễn đàn Thắc mắc chung
    Trả lời: 0
    Bài viết cuối: 26-03-2009, 03:23 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn