用C ++发送电子邮件

时间:2015-02-23 10:04:19

标签: c++ email

我试图用C ++发送电子邮件。我发现类CSmtp看起来很好。所以我尝试了示例项目,但它给出了ErrorCode:

  

错误:未定义的错误ID。

现在我试图找出问题所在,因为错误代码太笼统了。我已经找到了这个错误代码

  ErrorCode   WSA_SELECT (109)    ECSmtp::CSmtpError

我用Google搜索但没有找到答案。有人可以帮忙吗?

课程链接:CSmtp with SSL/TLS

代码:

    #include "CSmtp.h"
#include <iostream>

int main()
{
    bool bError = false;

    try
    {
        CSmtp mail;

#define test_gmail_tls

#if defined(test_gmail_tls)
        mail.SetSMTPServer("smtp.gmail.com",587);
        mail.SetSecurityType(USE_TLS);
#elif defined(test_gmail_ssl)
        mail.SetSMTPServer("smtp.gmail.com",465);
        mail.SetSecurityType(USE_SSL);
#elif defined(test_hotmail_TLS)
        mail.SetSMTPServer("smtp.live.com",25);
        mail.SetSecurityType(USE_TLS);
#elif defined(test_aol_tls)
        mail.SetSMTPServer("smtp.aol.com",587);
        mail.SetSecurityType(USE_TLS);
#elif defined(test_yahoo_ssl)
        mail.SetSMTPServer("plus.smtp.mail.yahoo.com",465);
        mail.SetSecurityType(USE_SSL);
#endif

        mail.SetLogin("* My Email Adress *");
        mail.SetPassword("*Password*");
        mail.SetSenderName("User");
        mail.SetSenderMail("* My Email Adress *");
        mail.SetReplyTo("* Email Adress of my friend *");
        mail.SetSubject("The message");
        mail.SetXPriority(XPRIORITY_NORMAL);
        mail.SetXMailer("The Bat! (v3.02) Professional");
        mail.AddMsgLine("Hello,");
        mail.AddMsgLine("");
        mail.AddMsgLine("...");
        mail.AddMsgLine("How are you today?");
        mail.AddMsgLine("");
        mail.AddMsgLine("Regards");
        mail.ModMsgLine(5,"regards");
        mail.DelMsgLine(2);
        mail.AddMsgLine("User");

        //mail.AddAttachment("../test1.jpg");
        //mail.AddAttachment("c:\\test2.exe");
        //mail.AddAttachment("c:\\test3.txt");
        mail.Send();
    }
    catch(ECSmtp e)
    {
        std::cout << "Error: " << e.GetErrorText().c_str() << ".\n";
        bError = true;
    }
    if(!bError)
        std::cout << "Mail was send successfully.\n";
    return 0;
}

2 个答案:

答案 0 :(得分:1)

我建议你使用powershell脚本发送电子邮件,然后从你的c ++程序中调用该脚本。使用smtp.gmail.com作为服务器&amp; 465端口。 :) 这可以帮助.. https://github.com/udit043/Send-email-using-powershell

答案 1 :(得分:0)

标准C ++ 11没有此类功能(但您的特定操作系统可能提供其他SMTP客户端库)。也许您需要像vmime这样的库或像POCO

这样的框架

请注意,电子邮件的能力是特定于操作系统的。 此外,大多数SMTP服务器配置为拒绝open mail relaying(否则,它们将被垃圾邮件机器人使用,并且通过它们的电子邮件将被列入黑名单后拒绝。)

例如,您可以在本地计算机或服务器上配置一些SMTP服务,并以编程方式通过localhost发送电子邮件(然后SMTP服务器将假脱机并转发电子邮件等) - 或者某些特定的和良好的-defined&#34; smarthost&#34;如果你的系统和网络有一个;您可能不希望在程序中连接一些SMTP中继主机名,并且如果收件人SMTP服务器关闭或无法访问,您确实希望假脱机(不丢失!)电子邮件;换句话说,你需要一些SMTP服务器。

您当然不想从头开始编写SMTP服务器代码!

因此,您的程序应该只将SMTP发送到某个可信主机,该主机已正确配置以避免发送垃圾邮件(然后您可能需要将某些FromReply-To SMTP标头设置为适合您的SMTP的内容主办)。确保谷歌,雅虎,美国在线等主要互联网公司正在仔细配置他们的SMTP服务,以禁止开放中继垃圾邮件。通常,他们只接受来自其业务客户端的SMTP中继连接(并且他们会切断客户端进行自动垃圾邮件)。因此,您应该将SMTP发送到ISP的SMTP服务器(或某些本地或附近的SMTP服务器)。

请注意,法律或您的ISP服务条款通常禁止发送垃圾邮件。

你也可以运行一些命令(例如使用popen)来发送邮件......