2013-11-20 114 views
-1

我想建立一個發送遊戲服務器的MS統計的自動電子郵件發送者,也可用於通知潛在的作弊者和問題的服務器管理員。服務器修改目前是一個C++ DLL,儘管在稍後我更有經驗時,我打算製作一個GUI專用服務器應用程序。自動電子郵件發件人

的電子郵件將被髮送一次,每5小時(服務器管理員可以通過配置設置更改此),當被報道一名球員,並添加一個成員(在服務器中獲得特權)。

我已經在谷歌簡單的介紹一下,所有我能看到的是這個外部庫。 是否可以發送電子郵件而無需額外的第三方庫? 另外,請求會是什麼?將使用DLL的應用程序在Windows Server 2008(或Windows 7)或更高版本上運行,並且可以在各種互聯網類型上運行。

這可以在沒有安裝SMTP服務器的情況下完成嗎?

+0

http://stackoverflow.com/questions/5926294/how-to-send-emails-using-yahoo-or- gmail-in-c – 4pie0

+0

@piotruś這是在第三方網站上的電子郵件帳戶。我需要發送一封沒有實際帳戶的電子郵件(我知道這是可能的,因爲我將它用於幾個PHP站點)。 原因是因爲很多人都會使用它,並且不想讓他們訪問電子郵件帳戶,他們可以很容易地鎖定他人。 – cybermonkey

+1

沒有。有例子如何連接到SMTP服務器,你只需要談談它 – 4pie0

回答

1

電子郵件必須發送到一個SMTP服務器,即接收器的SMTP服務器。有兩種方法可以實現這一點:通過與本地SMTP服務器交談,或通過自己充當SMTP服務器。

在後一種情況下,你必須連接到其他SMTP服務器,讓他們相信你是不是垃圾郵件發送者,並仍然提供了一些其自動生成的電子郵件。在面臨的挑戰應該清楚

+0

如果我要在自己的域上創建私人帳戶並通過此帳戶發送電子郵件,它會起作用嗎? – cybermonkey

+1

是的,因爲「自己的域名」意味着「安裝本地SMTP服務器」。它會代表您向遠程SMTP服務器進行通話。 – MSalters

1

的例子之一(!):

#include<iostream> 
    #include <sys/types.h> 
    #include <sys/socket.h> 
    #include <netinet/in.h> 
    #include <netdb.h> 
    #include <stdio.h> 
    using namespace std; 
    #define HELO "HELO 192.168.1.1\r\n" 
    #define DATA "DATA\r\n" 
    #define QUIT "QUIT\r\n" 

    //#define h_addr h_addr_list[0] 
    //FILE *fin; 
    int sock; 
    struct sockaddr_in server; 
    struct hostent *hp, *gethostbyname(); 
    char buf[BUFSIZ+1]; 
    int len; 
    char *host_id="192.168.1.10"; 
    char *from_id="[email protected]"; 
    char *to_id="[email protected]"; 
    char *sub="testmail\r\n"; 
    char wkstr[100]="hello how r u\r\n"; 

    /*=====Send a string to the socket=====*/ 

    void send_socket(char *s) 
    { 
     write(sock,s,strlen(s)); 
     write(1,s,strlen(s)); 
     //printf("Client:%s\n",s); 
    } 

    //=====Read a string from the socket=====*/ 

    void read_socket() 
    { 
     len = read(sock,buf,BUFSIZ); 
     write(1,buf,len); 
     //printf("Server:%s\n",buf); 
    } 

    /*=====MAIN=====*/ 
    int main(int argc, char* argv[]) 
    { 

    /*=====Create Socket=====*/ 
    sock = socket(AF_INET, SOCK_STREAM, 0); 
    if (sock==-1) 
    { 
    perror("opening stream socket"); 
    exit(1); 
    } 
    else 
     cout << "socket created\n"; 
    /*=====Verify host=====*/ 
    server.sin_family = AF_INET; 
    hp = gethostbyname(host_id); 
    if (hp==(struct hostent *) 0) 
    { 
    fprintf(stderr, "%s: unknown host\n", host_id); 
    exit(2); 
    } 

    /*=====Connect to port 25 on remote host=====*/ 
    memcpy((char *) &server.sin_addr, (char *) hp->h_addr, hp->h_length); 
    server.sin_port=htons(25); /* SMTP PORT */ 
    if (connect(sock, (struct sockaddr *) &server, sizeof server)==-1) 
    { 
    perror("connecting stream socket"); 
    exit(1); 
    } 
    else 
     cout << "Connected\n"; 
    /*=====Write some data then read some =====*/ 
    read_socket(); /* SMTP Server logon string */ 
    send_socket(HELO); /* introduce ourselves */ 
    read_socket(); /*Read reply */ 
    send_socket("MAIL FROM: "); 
    send_socket(from_id); 
    send_socket("\r\n"); 
    read_socket(); /* Sender OK */ 
    send_socket("VRFY "); 
    send_socket(from_id); 
    send_socket("\r\n"); 
    read_socket(); // Sender OK */ 
    send_socket("RCPT TO: "); /*Mail to*/ 
    send_socket(to_id); 
    send_socket("\r\n"); 
    read_socket(); // Recipient OK*/ 
    send_socket(DATA);// body to follow*/ 
    send_socket("Subject: "); 
    send_socket(sub); 
    read_socket(); // Recipient OK*/ 
    send_socket(wkstr); 
    send_socket(".\r\n"); 
    read_socket(); 
    send_socket(QUIT); /* quit */ 
    read_socket(); // log off */ 

    //=====Close socket and finish=====*/ 
    close(sock); 
    exit(0); 
    }