如何使用C ++ Builder获取电子邮件正文

时间:2018-08-08 01:41:17

标签: c++ c++builder


我想从我的Gmail帐户中获取一封电子邮件的电子邮件正文,所以我使用此代码,我在一个示例中找到了如何使用c ++ builder pop3阅读电子邮件的代码 提取使用过的正文的代码

TIdText *EText;
int message = SpinEdit1->Value;
MyPoP3->Retrieve(message, MyEmail);
Edit1->Text = MyEmail->Subject + " | " + MyEmail->From->Address;
Memo1->Clear();

for (int i = 0; i < MyEmail->MessageParts->Count; i++) {
    Memo1->Lines->Add(MyEmail->MessageParts->Items[i]->ContentType);
    EText = dynamic_cast<TIdText*>(MyEmail->MessageParts->Items[i]);
    Memo1->Lines->Add(EText->Body);
}

问题是我对TidText定义了未定义的符号,而我试图将其从TIdText更改为TIdMessage,但是我无法转换为它。 我也尝试过无循环或MyEmail->Body->Text的东西 此返回空字符串。
我从中获取了这段代码的视频here我不知道他使用的c ++构建器可能是旧的。现在我想知道如何从电子邮件地址中提取正文。
预先感谢。

1 个答案:

答案 0 :(得分:1)

  

问题是我没有为TidText定义符号

您的代码缺少#include <IdText.hpp>语句。

  

我试图将其从TIdText更改为TIdMessage,但我知道我无法转换为它。

因为TIdMessage不包含嵌套的TIdMessage对象。

  

我还尝试了不带循环或其他任何操作MyEmail->Body->Text,这会返回空字符串。

如果您的电子邮件是MIME编码的,则其文本不会存储在TIdMessage::Body属性中,而是存储在TIdText集合内的嵌套TIdMessage::MessageParts对象中。您必须查看TIdMessage::ContentType属性,才能知道电子邮件包含哪种结构。例如,如果CT以text/开头,则文本在TIdMessage::Body中。但是,如果CT以multipart/开头,则该文本位于TIdMessage::MessageParts中。

您应该阅读Indy网站上的此博客文章,以获取有关电子邮件的结构示例:

HTML Messages

  

我从视频中获得了这段代码的视频在这里,我不知道他使用的c ++构建器可能是旧的。

不,不是。