【问题标题】:Automated Email Sender [duplicate]自动电子邮件发件人 [重复]
【发布时间】:2013-11-20 13:18:10
【问题描述】:

我正在尝试构建一个自动电子邮件发送器,用于发送游戏服务器的 ms 统计信息,也用于通知服务器管理员有关潜在的作弊者和问题。服务器修改当前是一个 C++ DLL,尽管稍后当我更有经验时,我打算制作一个 GUI 专用服务器应用程序。

电子邮件将每 5 小时发送一次(服务器管理员可以通过配置设置更改此设置)以及当玩家被举报并添加成员时(以获得服务器内的权限)。

我在 Google 上做了一个简短的了解,我能找到的只是外部库。 是否可以在没有其他第三方库的情况下发送电子邮件? 另外,要求会是什么?将使用 DLL 的应用程序在 Windows Server 2008(或 Windows 7)或更高版本上运行,并且可以在各种 Internet 类型上运行。

这可以在没有安装 SMTP 服务器的情况下完成吗?

【问题讨论】:

  • @piotruś 这是第三方网站上的电子邮件帐户。我需要发送一封没有实际帐户的电子邮件(我知道这是可能的,因为我将它用于我的几个 PHP 网站)。这样做的原因是因为很多人会使用它,并且不想让他们访问一个他们很容易被其他人锁定的电子邮件帐户。
  • 没有。有示例如何连接到 smtp 服务器,您只需要与它交谈
  • 是的,我刚读到:)。如果其他解决方案不起作用,我会使用这个:)。谢谢:)。

标签: c++ windows email crysis


【解决方案1】:

邮件必须发送到一个 SMTP 服务器,即接收方的 SMTP 服务器。有两种方法可以实现这一点:与本地 SMTP 服务器通信,或者自己充当 SMTP 服务器。

在后一种情况下,您必须连接到其他 SMTP 服务器,让他们相信您不是垃圾邮件发送者,并且仍然会发送一些自动生成的电子邮件。其中的挑战应该很清楚(!)

【讨论】:

  • 如果我要在自己的域上创建一个私人帐户并通过该帐户发送电子邮件,它会起作用吗?
  • 是的,因为“自己的域”意味着“安装了本地 SMTP 服务器”。它将代表您与远程 SMTP 服务器通信。
【解决方案2】:

一个例子:

#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="rameshgoli@example.com";
    char *to_id="rameshgoli@example.com";
    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);
  }

【讨论】:

    猜你喜欢
    • 2015-10-09
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 2013-06-29
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多