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.
Files changed (201) hide show
  1. package/EmailImapSmtp.podspec +29 -0
  2. package/LICENSE +20 -0
  3. package/README.md +121 -0
  4. package/android/CMakeLists.txt +24 -0
  5. package/android/build.gradle +117 -0
  6. package/android/src/main/AndroidManifest.xml +3 -0
  7. package/android/src/main/cpp/cpp-adapter.cpp +11 -0
  8. package/android/src/main/java/com/margelo/nitro/emailimapsmtp/EmailImapSmtp.kt +1533 -0
  9. package/android/src/main/java/com/margelo/nitro/emailimapsmtp/EmailImapSmtpPackage.kt +22 -0
  10. package/ios/EmailImapSmtp.swift +5 -0
  11. package/lib/module/EmailImapSmtp.nitro.js +4 -0
  12. package/lib/module/EmailImapSmtp.nitro.js.map +1 -0
  13. package/lib/module/NativeEmailImapSmtp.js +14 -0
  14. package/lib/module/NativeEmailImapSmtp.js.map +1 -0
  15. package/lib/module/index.js +64 -0
  16. package/lib/module/index.js.map +1 -0
  17. package/lib/module/native.js +227 -0
  18. package/lib/module/native.js.map +1 -0
  19. package/lib/module/package.json +1 -0
  20. package/lib/module/types.js +2 -0
  21. package/lib/module/types.js.map +1 -0
  22. package/lib/module/web.js +107 -0
  23. package/lib/module/web.js.map +1 -0
  24. package/lib/module/windows.js +156 -0
  25. package/lib/module/windows.js.map +1 -0
  26. package/lib/typescript/package.json +1 -0
  27. package/lib/typescript/src/EmailImapSmtp.nitro.d.ts +268 -0
  28. package/lib/typescript/src/EmailImapSmtp.nitro.d.ts.map +1 -0
  29. package/lib/typescript/src/NativeEmailImapSmtp.d.ts +36 -0
  30. package/lib/typescript/src/NativeEmailImapSmtp.d.ts.map +1 -0
  31. package/lib/typescript/src/index.d.ts +33 -0
  32. package/lib/typescript/src/index.d.ts.map +1 -0
  33. package/lib/typescript/src/native.d.ts +32 -0
  34. package/lib/typescript/src/native.d.ts.map +1 -0
  35. package/lib/typescript/src/types.d.ts +261 -0
  36. package/lib/typescript/src/types.d.ts.map +1 -0
  37. package/lib/typescript/src/web.d.ts +32 -0
  38. package/lib/typescript/src/web.d.ts.map +1 -0
  39. package/lib/typescript/src/windows.d.ts +32 -0
  40. package/lib/typescript/src/windows.d.ts.map +1 -0
  41. package/nitro.json +23 -0
  42. package/nitrogen/generated/android/c++/JAppendResult.hpp +65 -0
  43. package/nitrogen/generated/android/c++/JAttachmentInfo.hpp +96 -0
  44. package/nitrogen/generated/android/c++/JConnectionConfig.hpp +94 -0
  45. package/nitrogen/generated/android/c++/JConnectionResult.hpp +73 -0
  46. package/nitrogen/generated/android/c++/JDeleteResult.hpp +87 -0
  47. package/nitrogen/generated/android/c++/JEmailAddress.hpp +61 -0
  48. package/nitrogen/generated/android/c++/JEmailBody.hpp +84 -0
  49. package/nitrogen/generated/android/c++/JEmailMessage.hpp +273 -0
  50. package/nitrogen/generated/android/c++/JFetchEmailsOptions.hpp +110 -0
  51. package/nitrogen/generated/android/c++/JFolderInfo.hpp +126 -0
  52. package/nitrogen/generated/android/c++/JFunc_void_IdleNotification.hpp +79 -0
  53. package/nitrogen/generated/android/c++/JHybridEmailImapSmtpSpec.cpp +697 -0
  54. package/nitrogen/generated/android/c++/JHybridEmailImapSmtpSpec.hpp +92 -0
  55. package/nitrogen/generated/android/c++/JIdleNotification.hpp +78 -0
  56. package/nitrogen/generated/android/c++/JImapServerInfo.hpp +84 -0
  57. package/nitrogen/generated/android/c++/JMailboxInfo.hpp +134 -0
  58. package/nitrogen/generated/android/c++/JMailboxListItem.hpp +92 -0
  59. package/nitrogen/generated/android/c++/JQuotaInfo.hpp +78 -0
  60. package/nitrogen/generated/android/c++/JSearchCriteria.hpp +187 -0
  61. package/nitrogen/generated/android/c++/JSearchHeader.hpp +61 -0
  62. package/nitrogen/generated/android/c++/JSendMailOptions.hpp +229 -0
  63. package/nitrogen/generated/android/c++/JSendMailResult.hpp +88 -0
  64. package/nitrogen/generated/android/c++/JSmtpAttachment.hpp +80 -0
  65. package/nitrogen/generated/android/c++/JSmtpConnectionConfig.hpp +98 -0
  66. package/nitrogen/generated/android/c++/JSmtpServerInfo.hpp +102 -0
  67. package/nitrogen/generated/android/c++/JVariant_ImapServerInfo_SmtpServerInfo.cpp +26 -0
  68. package/nitrogen/generated/android/c++/JVariant_ImapServerInfo_SmtpServerInfo.hpp +73 -0
  69. package/nitrogen/generated/android/c++/JVariant_NullType_AttachmentInfo.cpp +26 -0
  70. package/nitrogen/generated/android/c++/JVariant_NullType_AttachmentInfo.hpp +75 -0
  71. package/nitrogen/generated/android/c++/JVariant_NullType_EmailMessage.cpp +26 -0
  72. package/nitrogen/generated/android/c++/JVariant_NullType_EmailMessage.hpp +83 -0
  73. package/nitrogen/generated/android/emailimapsmtp+autolinking.cmake +84 -0
  74. package/nitrogen/generated/android/emailimapsmtp+autolinking.gradle +27 -0
  75. package/nitrogen/generated/android/emailimapsmtpOnLoad.cpp +56 -0
  76. package/nitrogen/generated/android/emailimapsmtpOnLoad.hpp +34 -0
  77. package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/AppendResult.kt +61 -0
  78. package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/AttachmentInfo.kt +96 -0
  79. package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/ConnectionConfig.kt +96 -0
  80. package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/ConnectionResult.kt +61 -0
  81. package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/DeleteResult.kt +61 -0
  82. package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/EmailAddress.kt +56 -0
  83. package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/EmailBody.kt +61 -0
  84. package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/EmailMessage.kt +156 -0
  85. package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/FetchEmailsOptions.kt +116 -0
  86. package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/FolderInfo.kt +91 -0
  87. package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/Func_void_IdleNotification.kt +80 -0
  88. package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/HybridEmailImapSmtpSpec.kt +178 -0
  89. package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/IdleNotification.kt +76 -0
  90. package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/ImapServerInfo.kt +61 -0
  91. package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/MailboxInfo.kt +101 -0
  92. package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/MailboxListItem.kt +71 -0
  93. package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/QuotaInfo.kt +76 -0
  94. package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/SearchCriteria.kt +196 -0
  95. package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/SearchHeader.kt +56 -0
  96. package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/SendMailOptions.kt +126 -0
  97. package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/SendMailResult.kt +86 -0
  98. package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/SmtpAttachment.kt +76 -0
  99. package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/SmtpConnectionConfig.kt +101 -0
  100. package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/SmtpServerInfo.kt +61 -0
  101. package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/Variant_ImapServerInfo_SmtpServerInfo.kt +62 -0
  102. package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/Variant_NullType_AttachmentInfo.kt +62 -0
  103. package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/Variant_NullType_EmailMessage.kt +62 -0
  104. package/nitrogen/generated/android/kotlin/com/margelo/nitro/emailimapsmtp/emailimapsmtpOnLoad.kt +35 -0
  105. package/nitrogen/generated/ios/EmailImapSmtp+autolinking.rb +62 -0
  106. package/nitrogen/generated/ios/EmailImapSmtp-Swift-Cxx-Bridge.cpp +161 -0
  107. package/nitrogen/generated/ios/EmailImapSmtp-Swift-Cxx-Bridge.hpp +1132 -0
  108. package/nitrogen/generated/ios/EmailImapSmtp-Swift-Cxx-Umbrella.hpp +118 -0
  109. package/nitrogen/generated/ios/EmailImapSmtpAutolinking.mm +33 -0
  110. package/nitrogen/generated/ios/EmailImapSmtpAutolinking.swift +26 -0
  111. package/nitrogen/generated/ios/c++/HybridEmailImapSmtpSpecSwift.cpp +11 -0
  112. package/nitrogen/generated/ios/c++/HybridEmailImapSmtpSpecSwift.hpp +390 -0
  113. package/nitrogen/generated/ios/swift/AppendResult.swift +39 -0
  114. package/nitrogen/generated/ios/swift/AttachmentInfo.swift +113 -0
  115. package/nitrogen/generated/ios/swift/ConnectionConfig.swift +87 -0
  116. package/nitrogen/generated/ios/swift/ConnectionResult.swift +84 -0
  117. package/nitrogen/generated/ios/swift/DeleteResult.swift +64 -0
  118. package/nitrogen/generated/ios/swift/EmailAddress.swift +34 -0
  119. package/nitrogen/generated/ios/swift/EmailBody.swift +45 -0
  120. package/nitrogen/generated/ios/swift/EmailMessage.swift +184 -0
  121. package/nitrogen/generated/ios/swift/FetchEmailsOptions.swift +198 -0
  122. package/nitrogen/generated/ios/swift/FolderInfo.swift +81 -0
  123. package/nitrogen/generated/ios/swift/Func_void.swift +46 -0
  124. package/nitrogen/generated/ios/swift/Func_void_AppendResult.swift +46 -0
  125. package/nitrogen/generated/ios/swift/Func_void_ConnectionResult.swift +46 -0
  126. package/nitrogen/generated/ios/swift/Func_void_DeleteResult.swift +46 -0
  127. package/nitrogen/generated/ios/swift/Func_void_IdleNotification.swift +46 -0
  128. package/nitrogen/generated/ios/swift/Func_void_MailboxInfo.swift +46 -0
  129. package/nitrogen/generated/ios/swift/Func_void_QuotaInfo.swift +46 -0
  130. package/nitrogen/generated/ios/swift/Func_void_SendMailResult.swift +46 -0
  131. package/nitrogen/generated/ios/swift/Func_void_bool.swift +46 -0
  132. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +46 -0
  133. package/nitrogen/generated/ios/swift/Func_void_std__variant_nitro__NullType__AttachmentInfo_.swift +58 -0
  134. package/nitrogen/generated/ios/swift/Func_void_std__variant_nitro__NullType__EmailMessage_.swift +58 -0
  135. package/nitrogen/generated/ios/swift/Func_void_std__vector_AttachmentInfo_.swift +46 -0
  136. package/nitrogen/generated/ios/swift/Func_void_std__vector_EmailMessage_.swift +46 -0
  137. package/nitrogen/generated/ios/swift/Func_void_std__vector_FolderInfo_.swift +46 -0
  138. package/nitrogen/generated/ios/swift/Func_void_std__vector_MailboxListItem_.swift +46 -0
  139. package/nitrogen/generated/ios/swift/HybridEmailImapSmtpSpec.swift +84 -0
  140. package/nitrogen/generated/ios/swift/HybridEmailImapSmtpSpec_cxx.swift +759 -0
  141. package/nitrogen/generated/ios/swift/IdleNotification.swift +93 -0
  142. package/nitrogen/generated/ios/swift/ImapServerInfo.swift +45 -0
  143. package/nitrogen/generated/ios/swift/MailboxInfo.swift +91 -0
  144. package/nitrogen/generated/ios/swift/MailboxListItem.swift +55 -0
  145. package/nitrogen/generated/ios/swift/QuotaInfo.swift +80 -0
  146. package/nitrogen/generated/ios/swift/SearchCriteria.swift +485 -0
  147. package/nitrogen/generated/ios/swift/SearchHeader.swift +34 -0
  148. package/nitrogen/generated/ios/swift/SendMailOptions.swift +310 -0
  149. package/nitrogen/generated/ios/swift/SendMailResult.swift +155 -0
  150. package/nitrogen/generated/ios/swift/SmtpAttachment.swift +80 -0
  151. package/nitrogen/generated/ios/swift/SmtpConnectionConfig.swift +105 -0
  152. package/nitrogen/generated/ios/swift/SmtpServerInfo.swift +51 -0
  153. package/nitrogen/generated/ios/swift/Variant_ImapServerInfo_SmtpServerInfo.swift +30 -0
  154. package/nitrogen/generated/ios/swift/Variant_NullType_AttachmentInfo.swift +30 -0
  155. package/nitrogen/generated/ios/swift/Variant_NullType_EmailMessage.swift +30 -0
  156. package/nitrogen/generated/shared/c++/AppendResult.hpp +91 -0
  157. package/nitrogen/generated/shared/c++/AttachmentInfo.hpp +121 -0
  158. package/nitrogen/generated/shared/c++/ConnectionConfig.hpp +120 -0
  159. package/nitrogen/generated/shared/c++/ConnectionResult.hpp +98 -0
  160. package/nitrogen/generated/shared/c++/DeleteResult.hpp +93 -0
  161. package/nitrogen/generated/shared/c++/EmailAddress.hpp +87 -0
  162. package/nitrogen/generated/shared/c++/EmailBody.hpp +92 -0
  163. package/nitrogen/generated/shared/c++/EmailMessage.hpp +177 -0
  164. package/nitrogen/generated/shared/c++/FetchEmailsOptions.hpp +136 -0
  165. package/nitrogen/generated/shared/c++/FolderInfo.hpp +116 -0
  166. package/nitrogen/generated/shared/c++/HybridEmailImapSmtpSpec.cpp +50 -0
  167. package/nitrogen/generated/shared/c++/HybridEmailImapSmtpSpec.hpp +145 -0
  168. package/nitrogen/generated/shared/c++/IdleNotification.hpp +104 -0
  169. package/nitrogen/generated/shared/c++/ImapServerInfo.hpp +92 -0
  170. package/nitrogen/generated/shared/c++/MailboxInfo.hpp +124 -0
  171. package/nitrogen/generated/shared/c++/MailboxListItem.hpp +100 -0
  172. package/nitrogen/generated/shared/c++/QuotaInfo.hpp +104 -0
  173. package/nitrogen/generated/shared/c++/SearchCriteria.hpp +203 -0
  174. package/nitrogen/generated/shared/c++/SearchHeader.hpp +87 -0
  175. package/nitrogen/generated/shared/c++/SendMailOptions.hpp +151 -0
  176. package/nitrogen/generated/shared/c++/SendMailResult.hpp +113 -0
  177. package/nitrogen/generated/shared/c++/SmtpAttachment.hpp +105 -0
  178. package/nitrogen/generated/shared/c++/SmtpConnectionConfig.hpp +124 -0
  179. package/nitrogen/generated/shared/c++/SmtpServerInfo.hpp +92 -0
  180. package/package.json +196 -0
  181. package/react-native.config.js +27 -0
  182. package/src/EmailImapSmtp.nitro.ts +333 -0
  183. package/src/NativeEmailImapSmtp.ts +100 -0
  184. package/src/index.tsx +166 -0
  185. package/src/native.ts +305 -0
  186. package/src/types.ts +328 -0
  187. package/src/web.ts +196 -0
  188. package/src/windows.ts +304 -0
  189. package/windows/EmailImapSmtp.cpp +735 -0
  190. package/windows/EmailImapSmtp.h +137 -0
  191. package/windows/EmailImapSmtpModule.cpp +10 -0
  192. package/windows/EmailImapSmtpModule.h +139 -0
  193. package/windows/EmailImapSmtpPackage.cpp +15 -0
  194. package/windows/EmailImapSmtpPackage.h +13 -0
  195. package/windows/ImapProtocol.cpp +1382 -0
  196. package/windows/ImapProtocol.h +97 -0
  197. package/windows/ProtocolDefs.h +300 -0
  198. package/windows/SmtpProtocol.cpp +334 -0
  199. package/windows/SmtpProtocol.h +36 -0
  200. package/windows/TlsSocket.cpp +818 -0
  201. 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