【问题标题】:I cant get this email program that I found to work我无法获得这个我发现可以工作的电子邮件程序
【发布时间】:2015-03-02 12:04:04
【问题描述】:

我找到了这个电子邮件程序,但我无法让它运行。我正在使用 Visual Studio 2013 C++。如果您知道任何其他程序,我也会参加任何其他程序。我所需要的只是能够将其放入我现有的代码中,以便通过电子邮件将号码发送到 gmail 帐户。我的错误是:

错误:

1>------ Build started: Project: sending email, Configuration: Debug Win32 ------
1>cl : Command line warning D9007: '/Gm' requires '/Zi or /ZI'; option ignored
1>  Source.cpp
1>c:\users\kyle\documents\visual studio 2013\projects\sending email\sending email\source.cpp(127): warning C4715: 'MailIt' : not all control paths return a value
1>Source.obj : error LNK2019: unresolved external symbol _closesocket@4 referenced in function   "int __cdecl MailIt(char *,char *,char *,char *,char *)" (?MailIt@@YAHPAD0000@Z)
1>Source.obj : error LNK2019: unresolved external symbol _connect@12 referenced in function "int   __cdecl MailIt(char *,char *,char *,char *,char *)" (?MailIt@@YAHPAD0000@Z)
1>Source.obj : error LNK2019: unresolved external symbol _htons@4 referenced in function "int __cdecl MailIt(char *,char *,char *,char *,char *)" (?MailIt@@YAHPAD0000@Z)
1>Source.obj : error LNK2019: unresolved external symbol _recv@16 referenced in function "int __cdecl MailIt(char *,char *,char *,char *,char *)" (?MailIt@@YAHPAD0000@Z)
1>Source.obj : error LNK2019: unresolved external symbol _send@16 referenced in function "int __cdecl MailIt(char *,char *,char *,char *,char *)" (?MailIt@@YAHPAD0000@Z)
1>Source.obj : error LNK2019: unresolved external symbol _socket@12 referenced in function "int __cdecl MailIt(char *,char *,char *,char *,char *)" (?MailIt@@YAHPAD0000@Z)
1>Source.obj : error LNK2019: unresolved external symbol _gethostbyname@4 referenced in function "int __cdecl MailIt(char *,char *,char *,char *,char *)" (?MailIt@@YAHPAD0000@Z)
1>Source.obj : error LNK2019: unresolved external symbol _WSAStartup@8 referenced in function "int __cdecl MailIt(char *,char *,char *,char *,char *)" (?MailIt@@YAHPAD0000@Z)
1>Source.obj : error LNK2019: unresolved external symbol _WSACleanup@0 referenced in function "int __cdecl MailIt(char *,char *,char *,char *,char *)" (?MailIt@@YAHPAD0000@Z)
1>MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
1>C:\Users\kyle\documents\visual studio 2013\Projects\sending email\Debug\sending email.exe : fatal error LNK1120: 10 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

代码:

#include <windows.h>
#include <stdio.h>
#include <winuser.h>
#include <windowsx.h>
#include <time.h>

/*If you don't know the mail exchange server for an address for the following
"nslookup -querytype=mx gmail.com" but replace gmail.com with the domain for
whatever email address you want. YOU MUST CHANGE  THESE SETTINGS OR
IT WILL NOT WORK!!! */

#define BUFSIZE 800
#define waittime 500
#define cmailserver "gmail-smtp-in.l.google.com"
#define cemailto "kmtompkinscode@gmail.com"
#define cemailfrom "kmtompkinscode@gmail.com"
#define LogLength 100
#define SMTPLog "smtp.log"
#define cemailsubject "pin"

int MailIt(char *mailserver, char *emailto, char *emailfrom, char *emailsubject,
              char *emailmessage) 
{
    SOCKET sockfd;
    WSADATA wsaData;
    FILE *smtpfile;

    #define bufsize 300
    int bytes_sent;   /* Sock FD */
    int err;
    struct hostent *host;   /* info from gethostbyname */
    struct sockaddr_in dest_addr;   /* Host Address */
    char line[1000];
    char *Rec_Buf = (char*)malloc(bufsize + 1);
    smtpfile = fopen(SMTPLog, "a+");
    if (WSAStartup(0x202, &wsaData) == SOCKET_ERROR) {
        fputs("WSAStartup failed", smtpfile);
        WSACleanup();
        return -1;
    }
    if ((host = gethostbyname(mailserver)) == NULL) {
        perror("gethostbyname");
        exit(1);
    }
    memset(&dest_addr, 0, sizeof(dest_addr));
    memcpy(&(dest_addr.sin_addr), host->h_addr, host->h_length);

    /* Prepare dest_addr */
    dest_addr.sin_family = host->h_addrtype;  /* AF_INET from gethostbyname */
    dest_addr.sin_port = htons(25); /* PORT defined above */

    /* Get socket */

    if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
        perror("socket");
        exit(1);
    }
    /* Connect !*/
    fputs("Connecting....\n", smtpfile);

    if(connect(sockfd, (struct sockaddr *)&dest_addr, sizeof(dest_addr)) == -1){
        perror("connect");
        exit(1);
    }

    Sleep(waittime);
    err = recv(sockfd, Rec_Buf, bufsize, 0); Rec_Buf[err] = '\0';
    fputs(Rec_Buf, smtpfile);
    strcpy(line, "helo me.somepalace.com\n");
    fputs(line, smtpfile);
    bytes_sent = send(sockfd, line, strlen(line), 0);
    Sleep(waittime);
    err = recv(sockfd, Rec_Buf, bufsize, 0); Rec_Buf[err] = '\0';
    fputs(Rec_Buf, smtpfile);
    strcpy(line, "MAIL FROM:<");
    strncat(line, emailfrom, strlen(emailfrom));
    strncat(line, ">\n", 3);
    fputs(line, smtpfile);
    bytes_sent = send(sockfd, line, strlen(line), 0);
    Sleep(waittime);
    err = recv(sockfd, Rec_Buf, bufsize, 0); Rec_Buf[err] = '\0';
    fputs(Rec_Buf, smtpfile);
    strcpy(line, "RCPT TO:<");
    strncat(line, emailto, strlen(emailto));
    strncat(line, ">\n", 3);
    fputs(line, smtpfile);
    bytes_sent = send(sockfd, line, strlen(line), 0);
    Sleep(waittime);
    err = recv(sockfd, Rec_Buf, bufsize, 0); Rec_Buf[err] = '\0';
    fputs(Rec_Buf, smtpfile);
    strcpy(line, "DATA\n");
    fputs(line, smtpfile);
    bytes_sent = send(sockfd, line, strlen(line), 0);
    Sleep(waittime);
    err = recv(sockfd, Rec_Buf, bufsize, 0); Rec_Buf[err] = '\0';
    fputs(Rec_Buf, smtpfile);
    Sleep(waittime);
    strcpy(line, "To:");
    strcat(line, emailto);
    strcat(line, "\n");
    strcat(line, "From:");
    strcat(line, emailfrom);
    strcat(line, "\n");
    strcat(line, "Subject:");
    strcat(line, emailsubject);
    strcat(line, "\n");
    strcat(line, emailmessage);
    strcat(line, "\r\n.\r\n");
    fputs(line, smtpfile);
    bytes_sent = send(sockfd, line, strlen(line), 0);
    Sleep(waittime);
    err = recv(sockfd, Rec_Buf, bufsize, 0); Rec_Buf[err] = '\0';
    fputs(Rec_Buf, smtpfile);
    strcpy(line, "quit\n");
    fputs(line, smtpfile);
    bytes_sent = send(sockfd, line, strlen(line), 0);
    Sleep(waittime);
    err = recv(sockfd, Rec_Buf, bufsize, 0); Rec_Buf[err] = '\0';
    fputs(Rec_Buf, smtpfile);
    fclose(smtpfile);
    #ifdef WIN32
    closesocket(sockfd);
    WSACleanup();
    #else
    close(sockfd);
    #endif
}

【问题讨论】:

  • 请尝试理解错误信息。至少对我来说非常冗长。这不是 C++。
  • 这不是c++是什么意思
  • 这也不是我见过的最好的格式:( 错误信息对我来说是不言自明的。C++ 编译器不喜欢 fopen(),并且正在抱怨它。
  • 是的,我将如何阻止它给我一个错误
  • 'error C4996: 'fopen': 这个函数或变量可能不安全。考虑改用 fopen_s。要禁用弃用,请使用 _CRT_SECURE_NO_WARNINGS。有关详细信息,请参阅在线帮助 - 有什么不清楚的地方?

标签: c++ visual-c++ email


【解决方案1】:

我猜问题是在project setting-&gt;C/C++-&gt;General Treat Warnings as Errors 中设置为“是”。

要解决它,您可以将其设置为“否”,并在Preprocessor definitions 中添加project setting-&gt;C/C++-&gt;Preprocessor _CRT_SECURE_NO_WARNINGS

编辑

this link can also help:

【讨论】:

  • 在设置调试中会属于哪个类别?
  • 将警告视为错误已关闭,但仍显示错误
  • 如果你只有一个文件,你也可以在顶部定义它:#define _CRT_SECURE_NO_WARNINGS
  • 它缺少链接器选项中的ws2_32.lib。您也可以在顶部某处添加pragma comment,如下所示:#pragma comment(lib, "Ws2_32.lib")
猜你喜欢
  • 2014-08-30
  • 1970-01-01
  • 2023-03-30
  • 2015-08-19
  • 1970-01-01
  • 2012-12-18
  • 1970-01-01
  • 1970-01-01
  • 2017-04-30
相关资源
最近更新 更多