如何使用 C++ 生成器获取电子邮件正文

How to get Body of the email using c++ builder


我想从我的 Gmail 帐户获取电子邮件正文,所以我使用这段代码,我在一个示例中找到了它,了解如何使用 C++ 构建器 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 这个 return 空字符串。
我从中获得此代码的视频 here 我不知道也许他使用的 C++ 生成器很旧。现在我想知道如何从电子邮件地址中提取正文。
提前致谢。

the problem is that i got undefine symbol to TidText

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

what i tried is to change it from TIdText to TIdMessage, but i got that i can't convert to it.

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

also i tried to try this without loop or something MyEmail->Body->Text this return empty string.

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

您应该阅读 Indy 网站上的这篇博客文章,了解电子邮件结构的示例:

HTML Messages

the video i got this code from it here i don't know maybe the c++ builder he use is old.

不,不是。