c++ gsoap ews exchange API sendmail getmail - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
w20011025
V2EX    C++

c++ gsoap ews exchange API sendmail getmail

  •  
  •   w20011025 2022-05-16 17:52:15 +08:00 via Android 2063 次点击
    这是一个创建于 1297 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有偿服务。 c++ 获取 ews 邮件

    18 条回复    2022-05-25 19:36:28 +08:00
    cnbatch
        1
    cnbatch  
       2022-05-16 19:51:17 +08:00   1
    有现成的库可以用:
    https://github.com/otris/ews-cpp

    仅仅用于发邮件、收邮件的话,基本够用。

    如果是想用在内网环境,例如企业内网 EWS 服务器的话,有可能必须加上预处理宏 EWS_DISABLE_TLS_CERT_VERIFICATION

    当然了,这个库跟微软自己的 C# 版的 EWS 库相比,差得远了
    w20011025
        2
    w20011025  
    OP
       2022-05-17 07:07:01 +08:00 via Android
    我先测试下,谢谢!
    w20011025
        3
    w20011025  
    OP
       2022-05-17 17:43:47 +08:00 via Android
    @cnbatch 收邮件没看到示例里面有?示例里有收邮件示例吗?谢谢
    w20011025
        5
    w20011025  
    OP
       2022-05-19 10:44:49 +08:00 via Android
    留个联系信箱感谢下,谢谢 !
    @cnbatch
    w20011025
        6
    w20011025  
    OP
       2022-05-19 22:29:11 +08:00 via Android
    @cnbatch 邮件正文部分内容,还有图片如何接收解析?
    cnbatch
        7
    cnbatch  
       2022-05-20 01:38:26 +08:00   1
    ge_message(id)之后可以获得每个 message ,而每个 message 可以用 get_body()获取 HTML 内容,或者用 to_xml()获取原始 XML 内容。至于获取后怎么解析,那得自己找 HTML 解析工具。

    至于图片,其实每个内嵌图片都是内联附件,messge.get_attachments()可以获取完整附件列表,包括内联附件和普通附件。内联附件用 is_inline()可以判断出来。
    只不过 ews-cpp 的兼容性有限,未必能正确读取附件内容。

    微软自家 C# 版本 EWS 库兼容性好得多,功能也多得多,只不过它也不能干 HTML parse 的工作,拿到邮件内容后也只能把邮件各部分内容提取出来,步骤也是类似的,顶多提取成功率比 ews-cpp 高得多,API 也多一些。

    在 IDE 里面对着各种函数都不妨试一试,只要不是写操作,都不会有什么影响。
    w20011025
        8
    w20011025  
    OP
       2022-05-20 10:34:17 +08:00 via Android
    我先继续测试下 ews 。

    c++ gsoap xml ,直接读取 ews ?这个实现是不是功能都齐全了?
    w20011025
        9
    w20011025  
    OP
       2022-05-25 00:17:32 +08:00 via Android
    @cnbatch ,发送图片附件一直失败?还有不能获取收件人邮箱??
    cnbatch
        10
    cnbatch  
       2022-05-25 02:24:18 +08:00   1
    gsoap XML 操控 ews 实在太弯弯绕绕了,而且由于许可证原因( GPLv2+商业授权),我没法在我所在的公司环境内测试。

    我用以下代码在公司环境里发送图片附件,试过了没问题。用的是 ews 自己的测试代码+小修改:

    //const auto env = ews::test::environment(); //由于我会指定内部 ews 服务器,所以注释掉 env
    auto service = ews::service("https:// *********", "", "",""); // 我所在的公司启用了 SSO ,所以不用输入用户名和密码

    auto message = ews::message();
    auto mail_subject = "Test mail from application";
    message.set_subject(mail_subject);
    std::vector<ews::mailbox> recipients;
    recipients.push_back(ews::mailbox("[email protected]"));
    message.set_to_recipients(recipients);
    auto text = ews::body("Welcome!\n\nThis is a test.\n");
    message.set_body(text);

    auto mail_attachment = ews::attachment::from_file(R"(D:\picture.png))"); // 自己指定文件路径
    auto mail_id = service.create_item(message, ews::message_disposition::save_only);
    service.create_attachment(mail_id, mail_attachment);
    auto search_expression = ews::is_equal_to(ews::item_property_path::has_attachments, true);
    ews::distinguished_folder_id drafts = ews::standard_folder::drafts;
    auto ids = service.find_item(drafts, search_expression);

    for (auto &ids : ids)
    {
    auto msg = service.get_message(ids);
    for (auto &reciver : msg.get_to_recipients())
    {
    std::cout << reciver.value() << "\n"; // 收件人邮箱逐个显示出来
    }
    if (msg.get_subject() == mail_subject)
    {
    service.send_item(id);
    break;
    }
    }

    先用纯英文字符的内容去试。
    cnbatch
        11
    cnbatch  
       2022-05-25 02:29:10 +08:00   1
    如果要发送中文电邮,假设用的是 Visual Studio 做开发环境,那么需要以下更改:

    1 、cpp 源代码文件的编码需要设置成 UTF-8 (文件->另存为->“保存”按钮旁边的三角形->编码保存->UTF-8 )
    2 、打开项目属性,按照这个说明改设置:
    https://docs.microsoft.com/zh-cn/cpp/build/reference/utf-8-set-source-and-executable-character-sets-to-utf-8
    cnbatch
        12
    cnbatch  
       2022-05-25 02:37:41 +08:00   1
    啊,不好意思,mail_attachment 我忘了补全进来。

    auto mail_attachment = ews::attachment::from_file(R"(D:\picture.png))", "image/png", "picture.png");

    第二个参数可以按照注释的指引,在注册表里面找
    w20011025
        13
    w20011025  
    OP
       2022-05-25 09:57:00 +08:00 via Android
    @cnbatch ,直接收邮件,获取收件人信箱名字,都是自己的信箱名字???获取发件人信箱地址?如何获取发件人信箱地址?
    w20011025
        14
    w20011025  
    OP
       2022-05-25 12:10:26 +08:00 via Android
    获取收件箱,发件人信箱地址?
    @cnbatch
    cnbatch
        15
    cnbatch  
       2022-05-25 18:06:05 +08:00   1
    不清楚你的环境是怎么样,我在公司内部试过是可以获取发件人,唯一例外的情况是发件人以共享邮箱的身份发邮件

    如果是普通的发送方式,是可以正确获取的,就以 find_unread_messages.cpp 为例修改:

    原文件的 for (const auto& id : item_ids) 里面的内容,改为

    for (const auto& id : item_ids)
    {
    auto msg = service.get_message(id);
    auto mail_address = msg.get_from();
    std::cout << mail_address.value() << "\n";
    }
    w20011025
        17
    w20011025  
    OP
       2022-05-25 19:35:32 +08:00 via Android
    目前,问题就是完整解析正文内容问题了。
    发送页面图片,接收解析页面图片问题了。
    w20011025
        18
    w20011025  
    OP
       2022-05-25 19:36:28 +08:00 via Android
    @cnbatch
    目前,问题就是完整解析正文内容问题了。
    发送页面图片,接收解析页面图片问题。谢谢
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4886 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 09:41 PVG 17:41 LAX 01:41 JFK 04:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86