我试图用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;
}
答案 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发送到某个可信主机,该主机已正确配置以避免发送垃圾邮件(然后您可能需要将某些From
或Reply-To
SMTP标头设置为适合您的SMTP的内容主办)。确保谷歌,雅虎,美国在线等主要互联网公司正在仔细配置他们的SMTP服务,以禁止开放中继垃圾邮件。通常,他们只接受来自其业务客户端的SMTP中继连接(并且他们会切断客户端进行自动垃圾邮件)。因此,您应该将SMTP发送到ISP的SMTP服务器(或某些本地或附近的SMTP服务器)。
请注意,法律或您的ISP服务条款通常禁止发送垃圾邮件。
你也可以运行一些命令(例如使用popen
)来发送邮件......