react-native-email-imap-smtp 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/EmailImapSmtp.podspec +29 -0
- package/LICENSE +20 -0
- package/README.md +121 -0
- package/android/CMakeLists.txt +24 -0
- package/android/build.gradle +117 -0
- package/android/src/main/AndroidManifest.xml +3 -0
- package/android/src/main/cpp/cpp-adapter.cpp +11 -0
- package/android/src/main/java/com/margelo/nitro/emailimapsmtp/EmailImapSmtp.kt +1533 -0
- package/android/src/main/java/com/margelo/nitro/emailimapsmtp/EmailImapSmtpPackage.kt +22 -0
- package/ios/EmailImapSmtp.swift +5 -0
- package/lib/module/EmailImapSmtp.nitro.js +4 -0
- package/lib/module/EmailImapSmtp.nitro.js.map +1 -0
- package/lib/module/NativeEmailImapSmtp.js +14 -0
- package/lib/module/NativeEmailImapSmtp.js.map +1 -0
- package/lib/module/index.js +64 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/native.js +227 -0
- package/lib/module/native.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/types.js +2 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/web.js +107 -0
- package/lib/module/web.js.map +1 -0
- package/lib/module/windows.js +156 -0
- package/lib/module/windows.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/EmailImapSmtp.nitro.d.ts +268 -0
- package/lib/typescript/src/EmailImapSmtp.nitro.d.ts.map +1 -0
- package/lib/typescript/src/NativeEmailImapSmtp.d.ts +36 -0
- package/lib/typescript/src/NativeEmailImapSmtp.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +33 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/native.d.ts +32 -0
- package/lib/typescript/src/native.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +261 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/lib/typescript/src/web.d.ts +32 -0
- package/lib/typescript/src/web.d.ts.map +1 -0
- package/lib/typescript/src/windows.d.ts +32 -0
- package/lib/typescript/src/windows.d.ts.map +1 -0
- package/nitro.json +23 -0
- package/nitrogen/generated/android/c++/JAppendResult.hpp +65 -0
- package/nitrogen/generated/android/c++/JAttachmentInfo.hpp +96 -0
- package/nitrogen/generated/android/c++/JConnectionConfig.hpp +94 -0
- package/nitrogen/generated/android/c++/JConnectionResult.hpp +73 -0
- package/nitrogen/generated/android/c++/JDeleteResult.hpp +87 -0
- package/nitrogen/generated/android/c++/JEmailAddress.hpp +61 -0
- package/nitrogen/generated/android/c++/JEmailBody.hpp +84 -0
- package/nitrogen/generated/android/c++/JEmailMessage.hpp +273 -0
- package/nitrogen/generated/android/c++/JFetchEmailsOptions.hpp +110 -0
- package/nitrogen/generated/android/c++/JFolderInfo.hpp +126 -0
- package/nitrogen/generated/android/c++/JFunc_void_IdleNotification.hpp +79 -0
- package/nitrogen/generated/android/c++/JHybridEmailImapSmtpSpec.cpp +697 -0
- package/nitrogen/generated/android/c++/JHybridEmailImapSmtpSpec.hpp +92 -0
- package/nitrogen/generated/android/c++/JIdleNotification.hpp +78 -0
- package/nitrogen/generated/android/c++/JImapServerInfo.hpp +84 -0
- package/nitrogen/generated/android/c++/JMailboxInfo.hpp +134 -0
- package/nitrogen/generated/android/c++/JMailboxListItem.hpp +92 -0
- package/nitrogen/generated/android/c++/JQuotaInfo.hpp +78 -0
- package/nitrogen/generated/android/c++/JSearchCriteria.hpp +187 -0
- package/nitrogen/generated/android/c++/JSearchHeader.hpp +61 -0
- package/nitrogen/generated/android/c++/JSendMailOptions.hpp +229 -0
- package/nitrogen/generated/android/c++/JSendMailResult.hpp +88 -0
- package/nitrogen/generated/android/c++/JSmtpAttachment.hpp +80 -0
- package/nitrogen/generated/android/c++/JSmtpConnectionConfig.hpp +98 -0
- package/nitrogen/generated/android/c++/JSmtpServerInfo.hpp +102 -0
- package/nitrogen/generated/android/c++/JVariant_ImapServerInfo_SmtpServerInfo.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_ImapServerInfo_SmtpServerInfo.hpp +73 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_AttachmentInfo.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_AttachmentInfo.hpp +75 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_EmailMessage.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_EmailMessage.hpp +83 -0
- package/nitrogen/generated/android/emailimapsmtp+autolinking.cmake +84 -0
- package/nitrogen/generated/android/emailimapsmtp+autolinking.gradle +27 -0
- package/nitrogen/generated/android/emailimapsmtpOnLoad.cpp +56 -0
- package/nitrogen/generated/android/emailimapsmtpOnLoad.hpp +34 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/AppendResult.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/AttachmentInfo.kt +96 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/ConnectionConfig.kt +96 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/ConnectionResult.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/DeleteResult.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/EmailAddress.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/EmailBody.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/EmailMessage.kt +156 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/FetchEmailsOptions.kt +116 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/FolderInfo.kt +91 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/Func_void_IdleNotification.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/HybridEmailImapSmtpSpec.kt +178 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/IdleNotification.kt +76 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/ImapServerInfo.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/MailboxInfo.kt +101 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/MailboxListItem.kt +71 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/QuotaInfo.kt +76 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/SearchCriteria.kt +196 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/SearchHeader.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/SendMailOptions.kt +126 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/SendMailResult.kt +86 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/SmtpAttachment.kt +76 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/SmtpConnectionConfig.kt +101 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/SmtpServerInfo.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/Variant_ImapServerInfo_SmtpServerInfo.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/Variant_NullType_AttachmentInfo.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/Variant_NullType_EmailMessage.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/emailimapsmtpOnLoad.kt +35 -0
- package/nitrogen/generated/ios/EmailImapSmtp+autolinking.rb +62 -0
- package/nitrogen/generated/ios/EmailImapSmtp-Swift-Cxx-Bridge.cpp +161 -0
- package/nitrogen/generated/ios/EmailImapSmtp-Swift-Cxx-Bridge.hpp +1132 -0
- package/nitrogen/generated/ios/EmailImapSmtp-Swift-Cxx-Umbrella.hpp +118 -0
- package/nitrogen/generated/ios/EmailImapSmtpAutolinking.mm +33 -0
- package/nitrogen/generated/ios/EmailImapSmtpAutolinking.swift +26 -0
- package/nitrogen/generated/ios/c++/HybridEmailImapSmtpSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridEmailImapSmtpSpecSwift.hpp +390 -0
- package/nitrogen/generated/ios/swift/AppendResult.swift +39 -0
- package/nitrogen/generated/ios/swift/AttachmentInfo.swift +113 -0
- package/nitrogen/generated/ios/swift/ConnectionConfig.swift +87 -0
- package/nitrogen/generated/ios/swift/ConnectionResult.swift +84 -0
- package/nitrogen/generated/ios/swift/DeleteResult.swift +64 -0
- package/nitrogen/generated/ios/swift/EmailAddress.swift +34 -0
- package/nitrogen/generated/ios/swift/EmailBody.swift +45 -0
- package/nitrogen/generated/ios/swift/EmailMessage.swift +184 -0
- package/nitrogen/generated/ios/swift/FetchEmailsOptions.swift +198 -0
- package/nitrogen/generated/ios/swift/FolderInfo.swift +81 -0
- package/nitrogen/generated/ios/swift/Func_void.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_AppendResult.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_ConnectionResult.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_DeleteResult.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_IdleNotification.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_MailboxInfo.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_QuotaInfo.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_SendMailResult.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_bool.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__variant_nitro__NullType__AttachmentInfo_.swift +58 -0
- package/nitrogen/generated/ios/swift/Func_void_std__variant_nitro__NullType__EmailMessage_.swift +58 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_AttachmentInfo_.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_EmailMessage_.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_FolderInfo_.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_MailboxListItem_.swift +46 -0
- package/nitrogen/generated/ios/swift/HybridEmailImapSmtpSpec.swift +84 -0
- package/nitrogen/generated/ios/swift/HybridEmailImapSmtpSpec_cxx.swift +759 -0
- package/nitrogen/generated/ios/swift/IdleNotification.swift +93 -0
- package/nitrogen/generated/ios/swift/ImapServerInfo.swift +45 -0
- package/nitrogen/generated/ios/swift/MailboxInfo.swift +91 -0
- package/nitrogen/generated/ios/swift/MailboxListItem.swift +55 -0
- package/nitrogen/generated/ios/swift/QuotaInfo.swift +80 -0
- package/nitrogen/generated/ios/swift/SearchCriteria.swift +485 -0
- package/nitrogen/generated/ios/swift/SearchHeader.swift +34 -0
- package/nitrogen/generated/ios/swift/SendMailOptions.swift +310 -0
- package/nitrogen/generated/ios/swift/SendMailResult.swift +155 -0
- package/nitrogen/generated/ios/swift/SmtpAttachment.swift +80 -0
- package/nitrogen/generated/ios/swift/SmtpConnectionConfig.swift +105 -0
- package/nitrogen/generated/ios/swift/SmtpServerInfo.swift +51 -0
- package/nitrogen/generated/ios/swift/Variant_ImapServerInfo_SmtpServerInfo.swift +30 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_AttachmentInfo.swift +30 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_EmailMessage.swift +30 -0
- package/nitrogen/generated/shared/c++/AppendResult.hpp +91 -0
- package/nitrogen/generated/shared/c++/AttachmentInfo.hpp +121 -0
- package/nitrogen/generated/shared/c++/ConnectionConfig.hpp +120 -0
- package/nitrogen/generated/shared/c++/ConnectionResult.hpp +98 -0
- package/nitrogen/generated/shared/c++/DeleteResult.hpp +93 -0
- package/nitrogen/generated/shared/c++/EmailAddress.hpp +87 -0
- package/nitrogen/generated/shared/c++/EmailBody.hpp +92 -0
- package/nitrogen/generated/shared/c++/EmailMessage.hpp +177 -0
- package/nitrogen/generated/shared/c++/FetchEmailsOptions.hpp +136 -0
- package/nitrogen/generated/shared/c++/FolderInfo.hpp +116 -0
- package/nitrogen/generated/shared/c++/HybridEmailImapSmtpSpec.cpp +50 -0
- package/nitrogen/generated/shared/c++/HybridEmailImapSmtpSpec.hpp +145 -0
- package/nitrogen/generated/shared/c++/IdleNotification.hpp +104 -0
- package/nitrogen/generated/shared/c++/ImapServerInfo.hpp +92 -0
- package/nitrogen/generated/shared/c++/MailboxInfo.hpp +124 -0
- package/nitrogen/generated/shared/c++/MailboxListItem.hpp +100 -0
- package/nitrogen/generated/shared/c++/QuotaInfo.hpp +104 -0
- package/nitrogen/generated/shared/c++/SearchCriteria.hpp +203 -0
- package/nitrogen/generated/shared/c++/SearchHeader.hpp +87 -0
- package/nitrogen/generated/shared/c++/SendMailOptions.hpp +151 -0
- package/nitrogen/generated/shared/c++/SendMailResult.hpp +113 -0
- package/nitrogen/generated/shared/c++/SmtpAttachment.hpp +105 -0
- package/nitrogen/generated/shared/c++/SmtpConnectionConfig.hpp +124 -0
- package/nitrogen/generated/shared/c++/SmtpServerInfo.hpp +92 -0
- package/package.json +196 -0
- package/react-native.config.js +27 -0
- package/src/EmailImapSmtp.nitro.ts +333 -0
- package/src/NativeEmailImapSmtp.ts +100 -0
- package/src/index.tsx +166 -0
- package/src/native.ts +305 -0
- package/src/types.ts +328 -0
- package/src/web.ts +196 -0
- package/src/windows.ts +304 -0
- package/windows/EmailImapSmtp.cpp +735 -0
- package/windows/EmailImapSmtp.h +137 -0
- package/windows/EmailImapSmtpModule.cpp +10 -0
- package/windows/EmailImapSmtpModule.h +139 -0
- package/windows/EmailImapSmtpPackage.cpp +15 -0
- package/windows/EmailImapSmtpPackage.h +13 -0
- package/windows/ImapProtocol.cpp +1382 -0
- package/windows/ImapProtocol.h +97 -0
- package/windows/ProtocolDefs.h +300 -0
- package/windows/SmtpProtocol.cpp +334 -0
- package/windows/SmtpProtocol.h +36 -0
- package/windows/TlsSocket.cpp +818 -0
- package/windows/TlsSocket.h +87 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// EmailImapSmtp.h — Nitro HybridObject 桥接层
|
|
3
|
+
// 将 Nitro 类型转换为 emailimap:: 类型,委托给协议层
|
|
4
|
+
// ============================================================
|
|
5
|
+
|
|
6
|
+
#pragma once
|
|
7
|
+
|
|
8
|
+
#include <string>
|
|
9
|
+
#include <vector>
|
|
10
|
+
#include <functional>
|
|
11
|
+
#include <memory>
|
|
12
|
+
#include <mutex>
|
|
13
|
+
#include <thread>
|
|
14
|
+
#include <atomic>
|
|
15
|
+
#include <condition_variable>
|
|
16
|
+
|
|
17
|
+
#include <NitroModules/HybridObject.hpp>
|
|
18
|
+
#include <NitroModules/Promise.hpp>
|
|
19
|
+
#include <NitroModules/ArrayBuffer.hpp>
|
|
20
|
+
#include <NitroModules/Null.hpp>
|
|
21
|
+
|
|
22
|
+
#include "nitrogen/generated/shared/c++/HybridEmailImapSmtpSpec.hpp"
|
|
23
|
+
#include "nitrogen/generated/shared/c++/ConnectionConfig.hpp"
|
|
24
|
+
#include "nitrogen/generated/shared/c++/ConnectionResult.hpp"
|
|
25
|
+
#include "nitrogen/generated/shared/c++/SmtpConnectionConfig.hpp"
|
|
26
|
+
#include "nitrogen/generated/shared/c++/MailboxListItem.hpp"
|
|
27
|
+
#include "nitrogen/generated/shared/c++/MailboxInfo.hpp"
|
|
28
|
+
#include "nitrogen/generated/shared/c++/FolderInfo.hpp"
|
|
29
|
+
#include "nitrogen/generated/shared/c++/EmailMessage.hpp"
|
|
30
|
+
#include "nitrogen/generated/shared/c++/EmailAddress.hpp"
|
|
31
|
+
#include "nitrogen/generated/shared/c++/EmailBody.hpp"
|
|
32
|
+
#include "nitrogen/generated/shared/c++/AttachmentInfo.hpp"
|
|
33
|
+
#include "nitrogen/generated/shared/c++/FetchEmailsOptions.hpp"
|
|
34
|
+
#include "nitrogen/generated/shared/c++/SearchCriteria.hpp"
|
|
35
|
+
#include "nitrogen/generated/shared/c++/SearchHeader.hpp"
|
|
36
|
+
#include "nitrogen/generated/shared/c++/DeleteResult.hpp"
|
|
37
|
+
#include "nitrogen/generated/shared/c++/IdleNotification.hpp"
|
|
38
|
+
#include "nitrogen/generated/shared/c++/QuotaInfo.hpp"
|
|
39
|
+
#include "nitrogen/generated/shared/c++/AppendResult.hpp"
|
|
40
|
+
#include "nitrogen/generated/shared/c++/SendMailOptions.hpp"
|
|
41
|
+
#include "nitrogen/generated/shared/c++/SendMailResult.hpp"
|
|
42
|
+
#include "nitrogen/generated/shared/c++/SmtpAttachment.hpp"
|
|
43
|
+
#include "nitrogen/generated/shared/c++/ImapServerInfo.hpp"
|
|
44
|
+
#include "nitrogen/generated/shared/c++/SmtpServerInfo.hpp"
|
|
45
|
+
|
|
46
|
+
#include "ProtocolDefs.h"
|
|
47
|
+
|
|
48
|
+
namespace emailimap {
|
|
49
|
+
class ImapClient;
|
|
50
|
+
class SmtpClient;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
namespace margelo::nitro::emailimapsmtp {
|
|
54
|
+
|
|
55
|
+
class EmailImapSmtp : public HybridEmailImapSmtpSpec {
|
|
56
|
+
public:
|
|
57
|
+
EmailImapSmtp();
|
|
58
|
+
~EmailImapSmtp() override;
|
|
59
|
+
|
|
60
|
+
// ─── IMAP Connection ────────────────────────────────────
|
|
61
|
+
std::shared_ptr<Promise<ConnectionResult>> imapConnect(const ConnectionConfig& config) override;
|
|
62
|
+
std::shared_ptr<Promise<void>> imapDisconnect() override;
|
|
63
|
+
|
|
64
|
+
// ─── Mailbox ────────────────────────────────────────────
|
|
65
|
+
std::shared_ptr<Promise<std::vector<MailboxListItem>>> imapListMailboxes() override;
|
|
66
|
+
std::shared_ptr<Promise<MailboxInfo>> imapSelectMailbox(const std::string& mailbox, bool readOnly) override;
|
|
67
|
+
std::shared_ptr<Promise<MailboxInfo>> imapRefreshMailbox() override;
|
|
68
|
+
|
|
69
|
+
// ─── Folders ────────────────────────────────────────────
|
|
70
|
+
std::shared_ptr<Promise<std::vector<FolderInfo>>> imapFetchFolders() override;
|
|
71
|
+
std::shared_ptr<Promise<void>> imapCreateFolder(const std::string& folderName) override;
|
|
72
|
+
std::shared_ptr<Promise<void>> imapDeleteFolder(const std::string& folderName) override;
|
|
73
|
+
std::shared_ptr<Promise<void>> imapRenameFolder(const std::string& oldName, const std::string& newName) override;
|
|
74
|
+
std::shared_ptr<Promise<void>> imapSubscribeFolder(const std::string& folderName) override;
|
|
75
|
+
std::shared_ptr<Promise<void>> imapUnsubscribeFolder(const std::string& folderName) override;
|
|
76
|
+
|
|
77
|
+
// ─── Fetch ──────────────────────────────────────────────
|
|
78
|
+
std::shared_ptr<Promise<std::vector<EmailMessage>>> imapFetchEmails(const FetchEmailsOptions& options) override;
|
|
79
|
+
std::shared_ptr<Promise<std::variant<NullType, EmailMessage>>> imapFetchEmailByUID(double uid) override;
|
|
80
|
+
|
|
81
|
+
// ─── Search ─────────────────────────────────────────────
|
|
82
|
+
std::shared_ptr<Promise<std::vector<EmailMessage>>> imapSearchEmails(const SearchCriteria& criteria) override;
|
|
83
|
+
|
|
84
|
+
// ─── Flags ──────────────────────────────────────────────
|
|
85
|
+
std::shared_ptr<Promise<void>> imapMarkAsRead(const std::vector<double>& uids, bool silent) override;
|
|
86
|
+
std::shared_ptr<Promise<void>> imapMarkAsFlagged(const std::vector<double>& uids, bool flagged) override;
|
|
87
|
+
|
|
88
|
+
// ─── Move / Copy / Delete ───────────────────────────────
|
|
89
|
+
std::shared_ptr<Promise<void>> imapMoveEmails(const std::vector<double>& uids, const std::string& destinationMailbox) override;
|
|
90
|
+
std::shared_ptr<Promise<void>> imapCopyEmails(const std::vector<double>& uids, const std::string& destinationMailbox) override;
|
|
91
|
+
std::shared_ptr<Promise<DeleteResult>> imapDeleteEmails(const std::vector<double>& uids) override;
|
|
92
|
+
std::shared_ptr<Promise<void>> imapExpunge() override;
|
|
93
|
+
|
|
94
|
+
// ─── Attachments ───────────────────────────────────────
|
|
95
|
+
std::shared_ptr<Promise<std::variant<NullType, AttachmentInfo>>> imapFetchAttachments(double uid, const std::string& partId) override;
|
|
96
|
+
std::shared_ptr<Promise<std::vector<AttachmentInfo>>> imapFetchAllAttachments(double uid) override;
|
|
97
|
+
|
|
98
|
+
// ─── IDLE ──────────────────────────────────────────────
|
|
99
|
+
std::shared_ptr<Promise<void>> imapIdle(const std::function<void(const IdleNotification&)>& callback) override;
|
|
100
|
+
std::shared_ptr<Promise<void>> imapStopIdle() override;
|
|
101
|
+
|
|
102
|
+
// ─── Quota ──────────────────────────────────────────────
|
|
103
|
+
std::shared_ptr<Promise<QuotaInfo>> imapGetQuota(const std::optional<std::string>& root) override;
|
|
104
|
+
|
|
105
|
+
// ─── Append ────────────────────────────────────────────
|
|
106
|
+
std::shared_ptr<Promise<AppendResult>> imapAppendMessage(const std::string& mailbox,
|
|
107
|
+
const std::shared_ptr<ArrayBuffer>& rawMimeData,
|
|
108
|
+
const std::optional<std::vector<std::string>>& flags) override;
|
|
109
|
+
|
|
110
|
+
// ═══════════════════════════════════════════════════════
|
|
111
|
+
// SMTP
|
|
112
|
+
// ═══════════════════════════════════════════════════════
|
|
113
|
+
std::shared_ptr<Promise<ConnectionResult>> smtpConnect(const SmtpConnectionConfig& config) override;
|
|
114
|
+
std::shared_ptr<Promise<void>> smtpDisconnect() override;
|
|
115
|
+
std::shared_ptr<Promise<SendMailResult>> smtpSendMail(const SendMailOptions& options) override;
|
|
116
|
+
std::shared_ptr<Promise<bool>> smtpVerifyConnection() override;
|
|
117
|
+
|
|
118
|
+
private:
|
|
119
|
+
std::unique_ptr<emailimap::ImapClient> m_imapClient;
|
|
120
|
+
std::unique_ptr<emailimap::SmtpClient> m_smtpClient;
|
|
121
|
+
std::optional<emailimap::SmtpConnectionConfig> m_smtpConfig;
|
|
122
|
+
|
|
123
|
+
// Keep-alive thread
|
|
124
|
+
std::atomic<bool> m_keepAliveRunning{false};
|
|
125
|
+
std::unique_ptr<std::thread> m_keepAliveThread;
|
|
126
|
+
|
|
127
|
+
// IDLE state
|
|
128
|
+
std::atomic<bool> m_idling{false};
|
|
129
|
+
std::function<void(const IdleNotification&)> m_idleCallback;
|
|
130
|
+
std::mutex m_idleMutex;
|
|
131
|
+
std::condition_variable m_idleCV;
|
|
132
|
+
|
|
133
|
+
void startKeepAlive();
|
|
134
|
+
void stopKeepAlive();
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
} // namespace margelo::nitro::emailimapsmtp
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// EmailImapSmtpModule.cpp — Windows TurboModule 实现
|
|
3
|
+
// ============================================================
|
|
4
|
+
|
|
5
|
+
#include "pch.h"
|
|
6
|
+
#include "EmailImapSmtpModule.h"
|
|
7
|
+
|
|
8
|
+
// 注意:编译器会自动展开 REACT_MODULE/REACT_METHOD 宏
|
|
9
|
+
// 生成对应的 .g.cpp 注册代码
|
|
10
|
+
// 此文件仅需包含头文件即可
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// EmailImapSmtpModule.h — Windows TurboModule 实现
|
|
3
|
+
// 通过 JSON 字符串与 JS 层通信,内部调用协议层 C++ 代码
|
|
4
|
+
// ============================================================
|
|
5
|
+
|
|
6
|
+
#pragma once
|
|
7
|
+
|
|
8
|
+
#include <string>
|
|
9
|
+
#include <unordered_map>
|
|
10
|
+
#include <memory>
|
|
11
|
+
#include <mutex>
|
|
12
|
+
|
|
13
|
+
#include "winrt/Microsoft.ReactNative.h"
|
|
14
|
+
#include "NativeModules.h"
|
|
15
|
+
|
|
16
|
+
#include "ImapProtocol.h"
|
|
17
|
+
#include "SmtpProtocol.h"
|
|
18
|
+
|
|
19
|
+
namespace winrt::EmailImapSmtp {
|
|
20
|
+
|
|
21
|
+
struct SessionState {
|
|
22
|
+
std::unique_ptr<emailimap::ImapClient> imapClient;
|
|
23
|
+
std::unique_ptr<emailimap::SmtpClient> smtpClient;
|
|
24
|
+
bool imapConnected = false;
|
|
25
|
+
bool smtpConnected = false;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
REACT_MODULE(EmailImapSmtpModule);
|
|
29
|
+
struct EmailImapSmtpModule {
|
|
30
|
+
// ─── Session 管理 ─────────────────────────────────────
|
|
31
|
+
std::unordered_map<std::string, std::shared_ptr<SessionState>> m_sessions;
|
|
32
|
+
std::mutex m_mutex;
|
|
33
|
+
int m_nextId = 1;
|
|
34
|
+
|
|
35
|
+
std::string createSession() {
|
|
36
|
+
auto state = std::make_shared<SessionState>();
|
|
37
|
+
state->imapClient = std::make_unique<emailimap::ImapClient>();
|
|
38
|
+
state->smtpClient = std::make_unique<emailimap::SmtpClient>();
|
|
39
|
+
std::string id = "sess_" + std::to_string(m_nextId++);
|
|
40
|
+
std::lock_guard<std::mutex> lock(m_mutex);
|
|
41
|
+
m_sessions[id] = state;
|
|
42
|
+
return id;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
std::shared_ptr<SessionState> getSession(const std::string& id) {
|
|
46
|
+
std::lock_guard<std::mutex> lock(m_mutex);
|
|
47
|
+
auto it = m_sessions.find(id);
|
|
48
|
+
if (it == m_sessions.end()) return nullptr;
|
|
49
|
+
return it->second;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
void removeSession(const std::string& id) {
|
|
53
|
+
std::lock_guard<std::mutex> lock(m_mutex);
|
|
54
|
+
m_sessions.erase(id);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// ─── IMAP 连接 ────────────────────────────────────────
|
|
58
|
+
|
|
59
|
+
REACT_METHOD(imapConnect);
|
|
60
|
+
std::string imapConnect(const std::string& configJson) noexcept {
|
|
61
|
+
try {
|
|
62
|
+
auto config = emailimap::ConnectionConfig{};
|
|
63
|
+
// TODO: parse configJson → config
|
|
64
|
+
// 使用 JSON 库(如 nlohmann/json)解析
|
|
65
|
+
|
|
66
|
+
auto sessionId = createSession();
|
|
67
|
+
auto session = getSession(sessionId);
|
|
68
|
+
std::string error;
|
|
69
|
+
if (session->imapClient->connect(config, error)) {
|
|
70
|
+
session->imapConnected = true;
|
|
71
|
+
return "{\"success\":true,\"sessionId\":\"" + sessionId + "\"}";
|
|
72
|
+
}
|
|
73
|
+
removeSession(sessionId);
|
|
74
|
+
return "{\"success\":false,\"error\":\"" + escapeJson(error) + "\"}";
|
|
75
|
+
} catch (const std::exception& e) {
|
|
76
|
+
return "{\"success\":false,\"error\":\"" + escapeJson(e.what()) + "\"}";
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
REACT_METHOD(imapDisconnect);
|
|
81
|
+
void imapDisconnect(const std::string& sessionId) noexcept {
|
|
82
|
+
auto session = getSession(sessionId);
|
|
83
|
+
if (session && session->imapConnected) {
|
|
84
|
+
session->imapClient->disconnect();
|
|
85
|
+
session->imapConnected = false;
|
|
86
|
+
}
|
|
87
|
+
removeSession(sessionId);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// ─── SMTP ──────────────────────────────────────────────
|
|
91
|
+
|
|
92
|
+
REACT_METHOD(smtpConnect);
|
|
93
|
+
std::string smtpConnect(const std::string& configJson) noexcept {
|
|
94
|
+
try {
|
|
95
|
+
auto config = emailimap::SmtpConnectionConfig{};
|
|
96
|
+
// TODO: parse configJson → config
|
|
97
|
+
|
|
98
|
+
auto sessionId = createSession();
|
|
99
|
+
auto session = getSession(sessionId);
|
|
100
|
+
std::string error;
|
|
101
|
+
if (session->smtpClient->connect(config, error)) {
|
|
102
|
+
session->smtpConnected = true;
|
|
103
|
+
return "{\"success\":true,\"sessionId\":\"" + sessionId + "\"}";
|
|
104
|
+
}
|
|
105
|
+
removeSession(sessionId);
|
|
106
|
+
return "{\"success\":false,\"error\":\"" + escapeJson(error) + "\"}";
|
|
107
|
+
} catch (const std::exception& e) {
|
|
108
|
+
return "{\"success\":false,\"error\":\"" + escapeJson(e.what()) + "\"}";
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
REACT_METHOD(smtpDisconnect);
|
|
113
|
+
void smtpDisconnect(const std::string& sessionId) noexcept {
|
|
114
|
+
auto session = getSession(sessionId);
|
|
115
|
+
if (session && session->smtpConnected) {
|
|
116
|
+
session->smtpClient->disconnect();
|
|
117
|
+
session->smtpConnected = false;
|
|
118
|
+
}
|
|
119
|
+
removeSession(sessionId);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
private:
|
|
123
|
+
static std::string escapeJson(const std::string& s) {
|
|
124
|
+
std::string result;
|
|
125
|
+
for (char c : s) {
|
|
126
|
+
switch (c) {
|
|
127
|
+
case '"': result += "\\\""; break;
|
|
128
|
+
case '\\': result += "\\\\"; break;
|
|
129
|
+
case '\n': result += "\\n"; break;
|
|
130
|
+
case '\r': result += "\\r"; break;
|
|
131
|
+
case '\t': result += "\\t"; break;
|
|
132
|
+
default: result += c;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return result;
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
} // namespace winrt::EmailImapSmtp
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#include "EmailImapSmtpPackage.h"
|
|
2
|
+
|
|
3
|
+
#include <NitroModules/NitroModules.hpp>
|
|
4
|
+
|
|
5
|
+
namespace margelo::nitro::emailimapsmtp {
|
|
6
|
+
|
|
7
|
+
std::shared_ptr<HybridObject> createEmailImapSmtp() {
|
|
8
|
+
return std::make_shared<EmailImapSmtp>();
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
void registerEmailImapSmtp() {
|
|
12
|
+
NitroModules::registerHybridObject("EmailImapSmtp", &createEmailImapSmtp);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
} // namespace margelo::nitro::emailimapsmtp
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include "EmailImapSmtp.h"
|
|
4
|
+
|
|
5
|
+
namespace margelo::nitro::emailimapsmtp {
|
|
6
|
+
|
|
7
|
+
/// Forward declaration for the registration function
|
|
8
|
+
void registerEmailImapSmtp();
|
|
9
|
+
|
|
10
|
+
/// Creates and returns a new instance of the EmailImapSmtp HybridObject
|
|
11
|
+
std::shared_ptr<HybridObject> createEmailImapSmtp();
|
|
12
|
+
|
|
13
|
+
} // namespace margelo::nitro::emailimapsmtp
|