C++ 如何将smtp的输出设为空

C++ 如何将smtp的输出设为空,c++,io,C++,Io,我正在为smtp使用以下代码: 当它调用sendmail时,输出将显示在终端中。如何将其发送到dev/null或不输出它?在后台运行没有帮助 部分输出: * About to connect() to smtp.gmail.com port 587 (#0) * Trying 173.194.79.109... * connected < 220 mx.google.com ESMTP nv6sm10641402pbc.42 > EHLO ubuntu < 250-mx.g

我正在为smtp使用以下代码:

当它调用
sendmail
时,输出将显示在终端中。如何将其发送到dev/null或不输出它?在后台运行没有帮助

部分输出:

* About to connect() to smtp.gmail.com port 587 (#0)
*   Trying 173.194.79.109... * connected
< 220 mx.google.com ESMTP nv6sm10641402pbc.42
> EHLO ubuntu
< 250-mx.google.com at your service, [222.164.82.97]
< 250-SIZE 35882577
< 250-8BITMIME
< 250-STARTTLS
< 250 ENHANCEDSTATUSCODES
> STARTTLS
< 220 2.0.0 Ready to start TLS
* successfully set certificate verify locations:
*   CAfile: none
*即将()连接到smtp.gmail.com端口587(#0)
*正在尝试173.194.79.109…*有联系的
<220 mx.google.com ESMTP nv6sm10641402pbc.42
>ehloubuntu
<250-mx.google.com为您服务,[222.164.82.97]
<250-尺寸35882577
<250-8bit
<250-STARTTLS
<250增强状态码
>STARTTLS
<220 2.0.0准备启动TLS
*已成功设置证书验证位置:
*卡菲尔:没有
代码:

#包括
#包括
#包括
#包括
使用名称空间std;
/*这是一个简单的示例,演示如何使用libcurl的SMTP发送邮件
*能力。它以SimpleStrp.c示例为基础,添加了一些
*身份验证和传输安全。
*/
#从“”定义
#定义CC“”
字符串地址、strSubject、strMessage;
结构上载\u状态{
整数行(u read);;
};
静态大小有效负载源(void*ptr、size\t size、size\t nmemb、void*userp)
{
const char*payload_text[]={ToAddress.c_str(),“From:”From“\n”,“Cc:”Cc“\n”,strSubject.c_str(),“\n”,/*要将标题与正文分开,请参阅RFC5322*/
strMessage.c_str(),NULL};
结构上传状态*上传状态=(结构上传状态*)用户p;
常量字符*数据;
如果((size==0)| |(nmemb==0)| |((size*nmemb)<1)){
返回0;
}
数据=有效载荷\文本[上传\ ctx->行\读取];
如果(数据){
尺寸长度=标准长度(数据);
memcpy(ptr、数据、len);
上传ctx->lines\u read++;
回程透镜;
}
返回0;
}
void sendMail(字符串strRecipent、字符串strubject、字符串strmessage){
ToAddress=“To:”;
ToAddress+=当前地址;
ToAddress+=“\n”;
strSubject=“主题:”;
strSubject+=strubject;
strSubject+=“\n”;
strMessage=strMessage;
卷曲*卷曲;
卷曲编码;
struct curl_slist*recipients=NULL;
结构上传\状态上传\ ctx;
上传\u ctx.lines\u read=0;
curl=curl_easy_init();
if(curl){
/*这是邮件服务器的URL。请注意此处使用的端口587,
*而不是普通的SMTP端口(25)。端口587通常用于
*安全邮件提交(请参阅RFC4403),但您应该使用
*匹配您的服务器配置*/
curl\u easy\u setopt(curl,CURLOPT\u URL,“smtp://smtp.gmail.com:500");
/*在本例中,我们将从纯文本连接开始,然后升级
*要使用STARTTLS命令传输层安全性(TLS),请小心
*在这里尝试使用CURLUSESSL,因为如果TLS升级失败,传输
*无论如何都将继续-请参阅libcurl中的安全性讨论
*有关更多详细信息,请参阅教程*/
curl_easy_setopt(curl,CURLOPT_USE_SSL,(long)CURLUSESSL_ALL);
/*如果服务器没有有效的证书,则可以禁用
*通过设置
*CURLOPT_SSL_VERIFYPEER和CURLOPT_SSL_VERIFYHOST选项设置为0(false)。
*curl\u easy\u setopt(curl,CURLOPT\u SSL\u VERIFYPEER,0L);
*curl\u easy\u setopt(curl,CURLOPT\u SSL\u VERIFYHOST,0L);
*总的来说,这是一个坏主意。它仍然比发送电子邮件要好
*不过,验证详细信息是纯文本的。
*相反,您应该获得颁发者证书(或主机证书)
*如果证书是自签名的),则将其添加到证书集中
*使用CURLOPT_CAINFO和/或CURLOPT_CAPATH的libcurl已知的
*有关更多信息,请参阅文档/SSLCERTS。
*/
//curl_easy_setopt(curl,CURLOPT_CAINFO,“/path/to/certificate.pem”);
/*要求运输安全的一个常见原因是保护
*防止“窥探”身份验证详细信息(用户名和密码)
*在网络上。以下是如何提供用户名和密码:*/
curl_easy_setopt(curl,CURLOPT_用户名,“sim。dssprojects@gmail.com");
curl_easy_setopt(curl,CURLOPT_密码,“SIMpassword”);
/*信封反向路径的值*/
curl_easy_setopt(curl,CURLOPT_MAIL_FROM,FROM);
/*添加两个收件人,在这种情况下,它们对应于
*标题中的To:和Cc:收件人,但它们可以是任何类型的
*接受者*/
recipients=curl\u slist\u append(recipients,strrecient.c_str());
recipients=curl\u slist\u append(recipients,CC);
curl\u easy\u setopt(curl、CURLOPT\u MAIL\u RCPT、收件人);
/*在本例中,我们使用回调函数来指定数据
*可以使用CURLOPT_READDATA选项指定指向的文件指针
*阅读。
*/
curl\u easy\u setopt(curl,CURLOPT\u READFUNCTION,payload\u source);
curl\u easy\u setopt(curl、CURLOPT\u READDATA和upload\u ctx);
/*由于通信量将被加密,因此启用调试非常有用
*libcurl中的信息,以查看传输过程中发生的情况。
*/
卷曲度(卷曲度,卷曲度(1L));
/*发送消息(包括标题)*/
res=旋度(curl)\u容易执行(curl);
/*检查错误*/
如果(res!=卷曲(OK)
fprintf(stderr,“curl\u easy\u perform()失败:%s\n”,
卷曲(容易的);
/*释放收件人列表并清理*/
所有(收件人)免费提交;
旋度\轻松\清洁(旋度);
}
}
内部主(空)
{
int-pid=fork();
如果(pid==0)
{

对于(int i=0;i),可能会重定向标准输出和标准错误。我不确定是否有一个等价机制来实现C++流,但您可以使用:


您可以在运行程序时重定向程序的输出。如下所示(假设*nix环境):

/>/dev/null
对于标准输出

./<yourprogram> &> /dev/null
/&>/dev/null

用于标准和错误输出。

从代码中删除或注释掉这一行:

  curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);

在调用
sendMail()
之前
./<yourprogram> > /dev/null
./<yourprogram> &> /dev/null
  curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);