2013-11-20 119 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); 
    }