使用libcurl的SMTP邮件

时间:2011-10-18 15:22:40

标签: c libcurl

我用libcurl编译了c示例船 源文件为smtp-tls.c
试图用它来通过Gmail发送邮件,这是我得到的回复

  
      
  • 关于连接()到smtp.gmail.com端口465(#0)
  •   
  • 尝试74.125.115.109 ... *已连接
  •   
  • 服务器使用Basic使用'xxxxxxx@gmail.com'

    进行身份验证      
        

    GET / HTTP / 1.1授权:基本xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx主持人:smtp.gmail.com:465     接受: /

      
  •   
  • 来自服务器的空回复

  •   
  • 连接#0主机smtp.gmail.com保持原样
  •   
  • 服务器没有返回任何内容(没有标头,没有数据)
  •   
  • 关闭连接#0   
  •   

我错过了什么?除了变量输入之外,我没有以任何方式修改代码。在这台机器上,我可以使用Outlook 2003发送和接收邮件 编辑
试过一个不同的港口。这是结果

  
      
  • 关于连接()到smtp.gmail.com端口587(#0)
  •   
  • 尝试74.125.93.109 ... *已连接
  •   
  • 使用Basic的用户'xxxxxxx@gmail.com'验证服务器   
        

    GET / HTTP / 1.1授权:基本xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx主持人:smtp.gmail.com:587     接受: /

  •     
     

220 mx.google.com ESMTP ew54y2x5of95qdz.12 502 5.5.1无法识别     命令。 ew54y2x5of95qdz.12     *连接#0到主机smtp.gmail.com完好无损     *关闭连接#0

  

修改
主要看起来像这样

int main()
{
 CURL *curl;
  CURLcode res;
  struct curl_slist *recipients = NULL;
  struct upload_status upload_ctx;

  upload_ctx.lines_read = 0;

  curl = curl_easy_init();
  if (curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "smtp://gmail.com:587");
    curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_ALL);
    curl_easy_setopt(curl, CURLOPT_USERNAME, "xxxxxx@gmail.com");
    curl_easy_setopt(curl, CURLOPT_PASSWORD, "xxxxxxxx");
    curl_easy_setopt(curl, CURLOPT_MAIL_FROM, FROM);
    recipients = curl_slist_append(recipients, TO);
    recipients = curl_slist_append(recipients, CC);
    curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients);
    curl_easy_setopt(curl, CURLOPT_READFUNCTION, payload_source);
    curl_easy_setopt(curl, CURLOPT_READDATA, &upload_ctx);
    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
    res = curl_easy_perform(curl);
    curl_slist_free_all(recipients);
    curl_easy_cleanup(curl);
  }
  return 0;
}


EDIT
看起来正确的网址应为smtp://smtp.gmail.com:587
这让我更进一步,现在我得到了

* About to connect() to smtp.gmail.com port 587 (#0)
*   Trying 74.125.45.108... * connected
< 220 mx.google.com ESMTP j26srtuiopnann.7
> EHLO my_computer_name
< 250-mx.google.com at your service, 
< 250-SIZE 35882577
< 250-8BITMIME
< 250-STARTTLS
< 250 ENHANCEDSTATUSCODES
* No known auth mechanisms supported!
> QUIT
< 221 2.0.0 closing connection j26srtuiopnann.7
* Closing connection #0
* Login denied


EDIT
Libcurl不是使用SSL支持构建的

2 个答案:

答案 0 :(得分:3)

第一个输出看起来像是在为libcurl提供一个HTTP URL。

根据您编辑的问题,问题现在变成了完全不同的问题。现在看起来你可能没有在你的内置libcurl中启用SSL?

答案 1 :(得分:0)

我的程序出现此错误Connect #0 to host smtp.gmail.com left intact failed。 但它正在发挥作用。我可以通过Gmail帐户发送邮件。 但我不知道这个错误的原因。

我使用命令curl-config --feature并获得结果:

SSL
IPv6
libz
IDN
NTLM
NTLM_WB