From a891c9bdd57a9ef9c17699d970a0383cfd994c92 Mon Sep 17 00:00:00 2001 From: Kaleva Aalto Date: Fri, 22 Dec 2023 16:14:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=A1=B9=E7=9B=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App.xaml | 7 + App.xaml.cs | 111 +++++++++ Assets/LockScreenLogo.scale-200.png | Bin 0 -> 1430 bytes Assets/SplashScreen.scale-200.png | Bin 0 -> 7700 bytes Assets/Square150x150Logo.scale-200.png | Bin 0 -> 2937 bytes ...o.altform-lightunplated_targetsize-256.png | Bin 0 -> 42531 bytes Assets/Square44x44Logo.scale-200.png | Bin 0 -> 1647 bytes ...x44Logo.targetsize-24_altform-unplated.png | Bin 0 -> 1255 bytes Assets/StoreLogo.png | Bin 0 -> 1451 bytes Assets/Wide310x150Logo.scale-200.png | Bin 0 -> 3204 bytes Controls/LoginButton.xaml | 38 +++ Controls/LoginButton.xaml.cs | 39 +++ MainPage.xaml | 15 ++ MainPage.xaml.cs | 40 ++++ MicaApps.Upw.Mail.csproj | 222 ++++++++++++++++++ MicaApps.Upw.Mail.sln | 79 +++++++ Models/Enums/MailType.cs | 13 + Models/ImapInfo.cs | 63 +++++ Models/Letter.cs | 19 ++ Models/UserData.cs | 25 ++ Models/UserDataByImap.cs | 39 +++ Package.appxmanifest | 49 ++++ Pages/HomePagel.xaml | 21 ++ Pages/HomePagel.xaml.cs | 44 ++++ Pages/Login/LoginByImapPage.xaml | 49 ++++ Pages/Login/LoginByImapPage.xaml.cs | 92 ++++++++ Pages/LoginPage.xaml | 24 ++ Pages/LoginPage.xaml.cs | 80 +++++++ Pages/MailPage.xaml | 17 ++ Pages/MailPage.xaml.cs | 48 ++++ Properties/AssemblyInfo.cs | 29 +++ Properties/Default.rd.xml | 31 +++ README.md | 1 + Resources/Strings.resw | 126 ++++++++++ Services/LoginStatus.cs | 36 +++ Services/StaticValues.cs | 24 ++ 36 files changed, 1381 insertions(+) create mode 100644 App.xaml create mode 100644 App.xaml.cs create mode 100644 Assets/LockScreenLogo.scale-200.png create mode 100644 Assets/SplashScreen.scale-200.png create mode 100644 Assets/Square150x150Logo.scale-200.png create mode 100644 Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png create mode 100644 Assets/Square44x44Logo.scale-200.png create mode 100644 Assets/Square44x44Logo.targetsize-24_altform-unplated.png create mode 100644 Assets/StoreLogo.png create mode 100644 Assets/Wide310x150Logo.scale-200.png create mode 100644 Controls/LoginButton.xaml create mode 100644 Controls/LoginButton.xaml.cs create mode 100644 MainPage.xaml create mode 100644 MainPage.xaml.cs create mode 100644 MicaApps.Upw.Mail.csproj create mode 100644 MicaApps.Upw.Mail.sln create mode 100644 Models/Enums/MailType.cs create mode 100644 Models/ImapInfo.cs create mode 100644 Models/Letter.cs create mode 100644 Models/UserData.cs create mode 100644 Models/UserDataByImap.cs create mode 100644 Package.appxmanifest create mode 100644 Pages/HomePagel.xaml create mode 100644 Pages/HomePagel.xaml.cs create mode 100644 Pages/Login/LoginByImapPage.xaml create mode 100644 Pages/Login/LoginByImapPage.xaml.cs create mode 100644 Pages/LoginPage.xaml create mode 100644 Pages/LoginPage.xaml.cs create mode 100644 Pages/MailPage.xaml create mode 100644 Pages/MailPage.xaml.cs create mode 100644 Properties/AssemblyInfo.cs create mode 100644 Properties/Default.rd.xml create mode 100644 README.md create mode 100644 Resources/Strings.resw create mode 100644 Services/LoginStatus.cs create mode 100644 Services/StaticValues.cs diff --git a/App.xaml b/App.xaml new file mode 100644 index 0000000..1e4b7ba --- /dev/null +++ b/App.xaml @@ -0,0 +1,7 @@ + + + diff --git a/App.xaml.cs b/App.xaml.cs new file mode 100644 index 0000000..181d13b --- /dev/null +++ b/App.xaml.cs @@ -0,0 +1,111 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.ApplicationModel; +using Windows.ApplicationModel.Activation; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; +using Microsoft.Extensions.DependencyInjection; + +namespace MicaApps.Upw.Mail +{ + /// + /// 提供特定于应用程序的行为,以补充默认的应用程序类。 + /// + sealed partial class App : Application + { + /// + /// 注入依赖 + /// + public static IServiceProvider Services { get; private set; } = new ServiceCollection() + .AddSingleton() + .BuildServiceProvider(); + + + + /// + /// 初始化单一实例应用程序对象。这是执行的创作代码的第一行, + /// 已执行,逻辑上等同于 main() 或 WinMain()。 + /// + public App() + { + this.InitializeComponent(); + this.Suspending += OnSuspending; + } + + + /// + /// 在应用程序由最终用户正常启动时进行调用。 + /// 将在启动应用程序以打开特定文件等情况下使用。 + /// + /// 有关启动请求和过程的详细信息。 + protected override void OnLaunched(LaunchActivatedEventArgs e) + { + Frame rootFrame = Window.Current.Content as Frame; + + // 不要在窗口已包含内容时重复应用程序初始化, + // 只需确保窗口处于活动状态 + if (rootFrame == null) + { + // 创建要充当导航上下文的框架,并导航到第一页 + rootFrame = new Frame(); + + rootFrame.NavigationFailed += OnNavigationFailed; + + if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) + { + //TODO: 从之前挂起的应用程序加载状态 + } + + // 将框架放在当前窗口中 + Window.Current.Content = rootFrame; + } + + if (e.PrelaunchActivated == false) + { + if (rootFrame.Content == null) + { + // 当导航堆栈尚未还原时,导航到第一页, + // 并通过将所需信息作为导航参数传入来配置 + // 参数 + rootFrame.Navigate(typeof(MainPage), e.Arguments); + } + // 确保当前窗口处于活动状态 + Window.Current.Activate(); + } + } + + /// + /// 导航到特定页失败时调用 + /// + ///导航失败的框架 + ///有关导航失败的详细信息 + void OnNavigationFailed(object sender, NavigationFailedEventArgs e) + { + throw new Exception("Failed to load Page " + e.SourcePageType.FullName); + } + + /// + /// 在将要挂起应用程序执行时调用。 在不知道应用程序 + /// 无需知道应用程序会被终止还是会恢复, + /// 并让内存内容保持不变。 + /// + /// 挂起的请求的源。 + /// 有关挂起请求的详细信息。 + private void OnSuspending(object sender, SuspendingEventArgs e) + { + var deferral = e.SuspendingOperation.GetDeferral(); + //TODO: 保存应用程序状态并停止任何后台活动 + deferral.Complete(); + } + } +} diff --git a/Assets/LockScreenLogo.scale-200.png b/Assets/LockScreenLogo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..735f57adb5dfc01886d137b4e493d7e97cf13af3 GIT binary patch literal 1430 zcmaJ>TTC2P7~aKltDttVHYH6u8Io4i*}3fO&d$gd*bA_<3j~&e7%8(eXJLfhS!M@! zKrliY>>6yT4+Kr95$!DoD(Qn-5TP|{V_KS`k~E6(LGS@#`v$hQo&^^BKsw3HIsZBT z_y6C2n`lK@apunKojRQ^(_P}Mgewt$(^BBKCTZ;*xa?J3wQ7~@S0lUvbcLeq1Bg4o zH-bvQi|wt~L7q$~a-gDFP!{&TQfc3fX*6=uHv* zT&1&U(-)L%Xp^djI2?~eBF2cxC@YOP$+9d?P&h?lPy-9M2UT9fg5jKm1t$m#iWE{M zIf%q9@;fyT?0UP>tcw-bLkz;s2LlKl2qeP0w zECS7Ate+Awk|KQ+DOk;fl}Xsy4o^CY=pwq%QAAKKl628_yNPsK>?A>%D8fQG6IgdJ ztnxttBz#NI_a@fk7SU`WtrpsfZsNs9^0(2a z@C3#YO3>k~w7?2hipBf{#b6`}Xw1hlG$yi?;1dDs7k~xDAw@jiI*+tc;t2Lflg&bM)0!Y;0_@=w%`LW^8DsYpS#-bLOklX9r?Ei}TScw|4DbpW%+7 zFgAI)f51s}{y-eWb|vrU-Ya!GuYKP)J7z#*V_k^Xo>4!1Yqj*m)x&0L^tg3GJbVAJ zJ-Pl$R=NAabouV=^z_t;^K*0AvFs!vYU>_<|I^#c?>>CR<(T?=%{;U=aI*SbZADLH z&(f2wz_Y0??Tf|g;?|1Znw6}6U43Q#qNRwv1vp9uFn1)V#*4p&%$mP9x&15^OaBiDS(XppT|z^>;B{PLVEbS3IFYV yGvCsSX*m literal 0 HcmV?d00001 diff --git a/Assets/SplashScreen.scale-200.png b/Assets/SplashScreen.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..023e7f1feda78d5100569825acedfd213a0d84e9 GIT binary patch literal 7700 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 literal 0 HcmV?d00001 diff --git a/Assets/Square150x150Logo.scale-200.png b/Assets/Square150x150Logo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..af49fec1a5484db1d52a7f9b5ec90a27c7030186 GIT binary patch literal 2937 zcma)84OCO-8BSud5)jwMLRVKgX(S?$n?Ld|vrsm<$CF7)&zTbyy1FE5bU`Q17MRv`9ue$;R(@8kR;#vJ*IM0>cJIAOte!d7oRgdH zd%ySjdB6L9=gX^A6)VzH7p2l@v~3zJAMw|DFy#^)F@@F*`mqUn=Il>l)8_+ab;nOW{%+iPx z+s{Eu|&pIs)Z7{La9~?xKfyl z#43?gjEL15d4WbOZo#SiP%>DB^+BcnJ=7dHEe;r#G=tuw|ka z%q@}##Uh7;tc%L_64m(kHtw74ty%BJMb)_1)#S0j`)F8_1jF7vScpsnH=0V19bO8y zR`0SjIdCUo&=>JwMQF8KHA<{ODHTiQh}0^@5QRmCA?gOH6_H3K^-_sNB^RrdNuK-R zOO*vOrKCVvDwgUck`kF(E7j{I#iiN;b*ZdCt4m@HPA`EuEqGGf4%!K<;(=I=&Vyrw z%TwcWtxa}8mCZ%Cyf&ActJ6_$ox5z6-D!0-dvnRx6t7y3d+h6QYpKWO;8OdnvERo7 zuEf>ih5`wqY)~o@OeVt-wM?Q!>QzdGRj!bz6fzYrfw$hZfAKzr2-M+D+R>}~oT574c;_3zquHcElqKIsryILt3g8n3jcMb+j?i?-L3FpZJ z2WRVBRdDPc+G5aaYg#5hpE+6nQ|(VSoxT3|biF;BUq#==-27Xi=gihDPYP$7?=9cP zYKE$jeQ|3~_L0VG-(F~2ZPyD0=k{J4Q~h(t__{-mz_w8{JDY9{`1ouzz!Vr5!ECdE z6U~O1k8c}24V7~zzXWTV-Pe4)y}wQJS&q%H5`Fo_f_JvIU489aCX$;P`u#!I-=^4ijC2{&9!O&h>mi?9oYD=GC#%)6{GzN6nQYw+Fal50!#x^asjBBR50i`+mho*ttoqV)ubM2KD9S~k7+FR4>{29?6 z{!l6kDdyTN0YJ9LgkPWeXm|gyi@zM3?0@{&pXT12w|78&W-q!RRF)&iLCEZVH<|fR zN0fr2^t8H(>L?>K#>^+jWROLral(Qy-xoBq1U7A&DV||wClb)Otd9?(gZ|8znMF}D zf<1haWz^s0qgecz;RFGt0C-B4g`jNGHsFU+;{<%t65v^sjk^h$lmWn#B0#_)9ij&d z-~lc`A)YYExi^7sBuPM^Y|wA2g*5?`K?#7tzELQYNxGo$UB$4J8RJp1k(8Jj+~hMT zlN~>M@KTTh^--8y3PK_NZ@AC!{PT=CziBzGd+wTJ^@icH!Bd}%)g8V)%K?|c&WTUk zy}qv1C%(fjRoZ4ozC3{O%@5?)XzH35zHns$pgU*Q?fj4v?fp1Qbm+j;3l;9jam9Da zXVcKjPlQ73x78QPu|Ffm6x?`~e3oD=gl=4kYK?={kD5j~QCXU)`HSdduNNENzA*2$ zOm3PzF!lN5e*06-f1Uot67wY#{o-S1!KZ7E=!~7ynnk9_iJR#kFoNbAOT#^2Gd17F zMmvU6>lndZQGd|ax9kUoXXO+$N?|j@6qpsF&_j7YXvwo_C{JpmLw5&#e6k>atv%es z5)7r*Wvv_JkUpT}M!_o!nVlEk1Zbl=a*2hQ*<|%*K1Glj^FcF`6kTzGQ3lz~2tCc@ z&x|tj;aH&1&9HwcJBcT`;{?a+pnej;M1HO(6Z{#J!cZA04hnFl;NXA+&`=7bjW_^o zfC40u3LMG?NdPtwGl>Tq6u}*QG)}-y;)lu-_>ee3kibW(69n0$0Zy!}9rQz%*v1iO zT9_H>99yIrSPYVy6^);rR}7Yo=J_T@hi+qhTZXnVWyf;JDYm5#eYLTxr*?kiNn!+Y zQ+LUkBafNJ#rH#C(?d5^;gw9o#%daEI{mA*LHPIHPU`#|H$hD zwm>0&+kahQ)E#%~k>&5@&#Vg82H?s%71=)(soi@174pi9--2{w{1$}Sz4zGn3Du&x bht0Iza^2ykEt4(epJ78uh5nDlX8(TxzDYwP literal 0 HcmV?d00001 diff --git a/Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png b/Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png new file mode 100644 index 0000000000000000000000000000000000000000..ddb5343a1d30a9b0decdd73b5a956bd89b755d16 GIT binary patch literal 42531 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 literal 0 HcmV?d00001 diff --git a/Assets/Square44x44Logo.targetsize-24_altform-unplated.png b/Assets/Square44x44Logo.targetsize-24_altform-unplated.png new file mode 100644 index 0000000000000000000000000000000000000000..f6c02ce97e0a802b85f6021e822c89f8bf57d5cd GIT binary patch literal 1255 zcmaJ>TWs4@7*5+{G#S+&C!qC#> zf>5N3P6jO*Cz>ug*(_DmW=)kea&m$gZ^+nyiF`;j%w@}y8)>p*SH}C`m?DXeieF2U zyQHecc_L%Gh!7GMt+hG06y;+|p4>m~}PjA}rKViGiEnn7G0ZO<>G|7q;2?NwGCM3s?eued6%hd$B+ z*kQJ{#~$S=DFE(%=E+UkmlEI*%3llUf~8Ja9YU1Vui0IbGBkW_gHB%Rd&!!ioX zs40O?i9I{};kle7GMvE7(rk`la=gTI)47=>%?q@^iL-nUo3}h4S}N-KHn8t5mVP8w z&bSErwp+37 zNJJ8?a|{r5Q3R0Z5s-LB1WHOwYC@7pCHWND#cL1cZ?{kJ368_*(UDWUDyb<}0y@o# zfMF016iMWPCb6obAxT$JlB6(2DrlXDTB&!0`!m??4F(qWMhjVZo?JXQmz`1*58Z=& zcDmB|S-E@j?BoFGix0flckqdS4jsPNzhfWyWIM98GxcLs89C(~dw%$_t;JjX-SD}E zfiGV;{8Q%8r}w9x>EEigW81>`kvnU@pK)4+xk9@+bNj9L!AAZ@SZ@q|)&BmY3+HZx zul~BeG4|}-;L%cHViQGQX?^zFfO0&#cHwel=d`lH9sJ-@Sl@n*(8J2>%Ac`IxyY?Q z{=GhWvC#gu-~Ia7*n{=+;qM?Ul_wy1+u7ho;=`>EwP^g~R@{unBds`!#@}tluZQpS zm)M~nYEifJWJGx?_6DcTy>#uh%>!H9=hb^(v`=m3F1{L>db=<5_tm+_&knAQ2EU$s Mu9UqpbNZeC0BbUo^Z)<= literal 0 HcmV?d00001 diff --git a/Assets/StoreLogo.png b/Assets/StoreLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..7385b56c0e4d3c6b0efe3324aa1194157d837826 GIT binary patch literal 1451 zcmaJ>eN5D57_Z|bH;{0+1#mbl)eTU3{h)Wf7EZV?;HD@XL@{B`Ui%(2aMxQ~xdXSv z5nzWi(LW)U2=Vc-cY@s7nPt{i0hc6!7xN4NNHI#EQl>YNBy8l4%x9gr_W-j zEZMQmmTIy(>;lblRfh`dIyTgc9W5d!VP$L4(kKrN1c5G~(O_#xG zAJCNTstD^5SeXFB+&$h=ToJP2H>xr$iqPs-#O*;4(!Fjw25-!gEb*)mU}=)J;Iu>w zxK(5XoD0wrPSKQ~rbL^Cw6O_03*l*}i=ydbu7adJ6y;%@tjFeXIXT+ms30pmbOP%Q zX}S;+LBh8Tea~TSkHzvX6$rYb)+n&{kSbIqh|c7hmlxmwSiq5iVhU#iEQ<>a18|O^Sln-8t&+t`*{qBWo5M?wFM(JuimAOb5!K#D}XbslM@#1ZVz_;!9U zpfEpLAOz=0g@bd6Xj_ILi-x^!M}73h^o@}hM$1jflTs|Yuj9AL@A3<-?MV4!^4q`e z)fO@A;{9K^?W?DbnesnPr6kK>$zaKo&;FhFd(GYFCIU^T+OIMb%Tqo+P%oq(IdX7S zf6+HLO?7o0m+p>~Tp5UrXWh!UH!wZ5kv!E`_w)PTpI(#Iw{AS`gH4^b(bm^ZCq^FZ zY9DD7bH}rq9mg88+KgA$Zp!iWncuU2n1AuIa@=sWvUR-s`Qb{R*kk(SPU^`$6BXz8 zn#7yaFOIK%qGxyi`dYtm#&qqox0$h=pNi#u=M8zUG@bpiZ=3sT=1}Trr}39cC)H|v zbL?W)=&s4zrh)7>L(|cc%$1#!zfL?HjpeP%T+x_a+jZ16b^iKOHxFEX$7d|8${H-* zIrOJ5w&i$>*D>AKaIoYg`;{L@jM((Kt?$N$5OnuPqVvq**Nm}(f0wwOF%iX_Pba;V z;m@wxX&NcV3?<1+u?A{y_DIj7#m3Af1rCE)o`D&Y3}0%7E;iX1yMDiS)sh0wKi!36 zL!Wmq?P^Ku&rK~HJd97KkLTRl>ScGFYZNlYytWnhmuu|)L&ND8_PmkayQb{HOY640 bno1(wj@u8DCVuFR|31B*4ek@pZJqxCDDe1x literal 0 HcmV?d00001 diff --git a/Assets/Wide310x150Logo.scale-200.png b/Assets/Wide310x150Logo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..288995b397fdbef1fb7e85afd71445d5de1952c5 GIT binary patch literal 3204 zcmbVPeQXow8NYmBd90>}0NP?GhXW~VaeThm=a0tV#EwJMI!)6M3}|c4_Bl3=Kd>G0 z(GHx1wl<7(tP?FsOQkTilSo*iIvF%uArExJ73~P zSv1xEy!U(Wd4A9D`FQV@W3@F^qJ@PEF$@z`Z!*BbFsS(^?B zyiAzJ+q})bkgiQHWqEb*jJD-coHYr1^iocg)l!Qa{Xqs-l~6J}p-|##ZHYofskQ3$ zI0;xzXyhazBeXhIsg5A=%ufo@f)1yy&ScKS0;HF^!r_2UE^lpZEom(+@duma3awTv zCrCL-%D_SvYWIcdHkmI}#50(fkUi)Qgx!80ju>g1za^}ff>JI8Z@^-iCiaCgg@TgF z+vtE?Q9{VQUX&MW9SYYmGcxA14%N2@7FwBTD4N<(2{nWgV8$e3?-F=L^&FrtWn~(U_Q~~^uYiyeY6-KoTnfh9AWz@ zIKje0)u!_Lw)E}G!#kEfwKVdNt(UAf9*f>tEL_(=xco-T%jTi@7YlC3hs2ik%Le0H ztj}RTeCF(5mwvi3_56>-yB?l;J>-1%!9~=fs|QcNG3J~a@JCu`4SB460s0ZO+##4fFUSGLcj_ja^fL4&BKALfb#$6$O?>P@qx2Agl^x0i&ugt zsy5Pyu=()`7HRMG3IB7F1@`_ z+-!J%#i6e^U$e#+C%Q>_qVRzWRsG^W_n+@OcX@vzI&z;mzHNb!GQ?LWA(wtpqHqTM z1OFw_{Zn?fD)p)`c`kOgv{de=v@suGRqY{N^U7gI1VF3*F=obwaXI6ob5__Yn zVTguS!%(NI09J8x#AO_aW!9W7k*UvB;IWDFC3srwftr{kHj%g)fvnAm;&h_dnl~

MY- zf+K}sCe8qU6Ujs`3ua{U0Of$R_gVQBuUA za0v=mu#vIOqiiAZOr&h*$WyOw&k-xr$;G4Ixa!#TJNr>95(h>l%)PUy4p+^SgR(uR zta%k*?ny-+nAr8spEk1fo{J4i!b^Fia`N{_F6@zidA2ZTTrjl#^5Z-2KfB@Cu}l9s z(*|Z2jc?p~vn2f)3y9i*7zJV1L{$?|&q)4oaT;uXi6>1GkRXVTOzAz(RHEmr=eFIi z`}<>-Q?K0GN8!IYxeP1XKXO+jsJbp~o^);Bc;%b7Flpe7;1`Ny@3r7ZR;?R)aJt8C ziNlEC<@3f_lIV4TwV}&e;D!Ee5_|e#g0LUh=5vmYWYm7&2h*M>QPKvGh9-)wfMMW3 z8J9b%1k7dzPzO0_NGQy92BZ^FR6R~6;^6?lqO;-QUP4BY%cG%3vEhbm#>4vIhPBh3 z-+pZGjh$x%Hp{?=FHsMp0&wNPlj00us{&`1ZOZTqs8%4X&xH=UDr*xyBW(Zp&Em94 zf)ZSfn#yg0N)>!1kWdkqJ^S*z0FF5|fj&qcE#Na|%OY0$uO>!&hP+1ywfD_WXk@4J(?MBftK7>$Nvqh@tDuarN%PrTLQ2Uzysx>UV=V zk^RrDSvdQ?0;=hY67EgII-f4`t=+i*yS=Y~!XlqIy_4x&%+OdfbKOFPXS2X5%4R{N z$SQMX^AK6(fA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Controls/LoginButton.xaml.cs b/Controls/LoginButton.xaml.cs new file mode 100644 index 0000000..2dc38a1 --- /dev/null +++ b/Controls/LoginButton.xaml.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + +//https://go.microsoft.com/fwlink/?LinkId=234236 上介绍了“用户控件”项模板 + +namespace MicaApps.Upw.Mail.Controls +{ + public sealed partial class LoginButton : Button + { + public LoginButton() + { + this.InitializeComponent(); + } + + ///

+ /// 主标题 + /// + public string title { set=>this.textblock_title.Text = value; } + /// + /// 副标题 + /// + public string subTitle { set => this.textblock_subTitle.Text = value; } + + + + } +} diff --git a/MainPage.xaml b/MainPage.xaml new file mode 100644 index 0000000..d55f01a --- /dev/null +++ b/MainPage.xaml @@ -0,0 +1,15 @@ + + + + + + diff --git a/MainPage.xaml.cs b/MainPage.xaml.cs new file mode 100644 index 0000000..4e21eaf --- /dev/null +++ b/MainPage.xaml.cs @@ -0,0 +1,40 @@ +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using System.Threading.Tasks; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + +// https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x804 上介绍了“空白页”项模板 + +namespace MicaApps.Upw.Mail +{ + /// + /// 可用于自身或导航至 Frame 内部的空白页。 + /// + public sealed partial class MainPage : Page + { + public MainPage() + { + this.InitializeComponent(); + + } + + + + private void Page_Loaded(object sender, RoutedEventArgs e) + { + this.frame_main.Navigate(typeof(Pages.LoginPage)); + } + } +} diff --git a/MicaApps.Upw.Mail.csproj b/MicaApps.Upw.Mail.csproj new file mode 100644 index 0000000..b54aba7 --- /dev/null +++ b/MicaApps.Upw.Mail.csproj @@ -0,0 +1,222 @@ + + + + + Debug + x86 + {77A48790-BE44-4F0B-90FE-1AD09730BF47} + AppContainerExe + Properties + MicaApps.Upw.Mail + MicaApps.Upw.Mail + zh-CN + UAP + 10.0.19041.0 + 10.0.17763.0 + 14 + 512 + {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + true + false + + + true + bin\x86\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x86 + false + prompt + true + + + bin\x86\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x86 + false + prompt + true + true + + + true + bin\ARM\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + ARM + false + prompt + true + + + bin\ARM\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + ARM + false + prompt + true + true + + + true + bin\ARM64\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + ARM64 + false + prompt + true + true + + + bin\ARM64\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + ARM64 + false + prompt + true + true + + + true + bin\x64\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x64 + false + prompt + true + + + bin\x64\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x64 + false + prompt + true + true + + + PackageReference + + + + App.xaml + + + LoginButton.xaml + + + MainPage.xaml + + + + + + + + HomePagel.xaml + + + LoginPage.xaml + + + LoginByImapPage.xaml + + + MailPage.xaml + + + + + + + + Designer + + + + + + + + + + + + + + + MSBuild:Compile + Designer + + + Designer + MSBuild:Compile + + + MSBuild:Compile + Designer + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + + + 4.3.0 + + + 8.0.0 + + + 6.2.14 + + + 4.3.0 + + + + + + + 14.0 + + + + \ No newline at end of file diff --git a/MicaApps.Upw.Mail.sln b/MicaApps.Upw.Mail.sln new file mode 100644 index 0000000..8d71363 --- /dev/null +++ b/MicaApps.Upw.Mail.sln @@ -0,0 +1,79 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.8.34330.188 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MicaApps.Upw.Mail", "MicaApps.Upw.Mail.csproj", "{77A48790-BE44-4F0B-90FE-1AD09730BF47}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|ARM = Debug|ARM + Debug|ARM64 = Debug|ARM64 + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|ARM = Release|ARM + Release|ARM64 = Release|ARM64 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Debug|Any CPU.ActiveCfg = Debug|x64 + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Debug|Any CPU.Build.0 = Debug|x64 + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Debug|Any CPU.Deploy.0 = Debug|x64 + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Debug|ARM.ActiveCfg = Debug|ARM + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Debug|ARM.Build.0 = Debug|ARM + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Debug|ARM.Deploy.0 = Debug|ARM + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Debug|ARM64.Build.0 = Debug|ARM64 + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Debug|x64.ActiveCfg = Debug|x64 + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Debug|x64.Build.0 = Debug|x64 + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Debug|x64.Deploy.0 = Debug|x64 + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Debug|x86.ActiveCfg = Debug|x86 + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Debug|x86.Build.0 = Debug|x86 + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Debug|x86.Deploy.0 = Debug|x86 + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Release|Any CPU.ActiveCfg = Release|x64 + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Release|Any CPU.Build.0 = Release|x64 + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Release|Any CPU.Deploy.0 = Release|x64 + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Release|ARM.ActiveCfg = Release|ARM + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Release|ARM.Build.0 = Release|ARM + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Release|ARM.Deploy.0 = Release|ARM + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Release|ARM64.ActiveCfg = Release|ARM64 + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Release|ARM64.Build.0 = Release|ARM64 + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Release|ARM64.Deploy.0 = Release|ARM64 + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Release|x64.ActiveCfg = Release|x64 + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Release|x64.Build.0 = Release|x64 + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Release|x64.Deploy.0 = Release|x64 + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Release|x86.ActiveCfg = Release|x86 + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Release|x86.Build.0 = Release|x86 + {77A48790-BE44-4F0B-90FE-1AD09730BF47}.Release|x86.Deploy.0 = Release|x86 + {11FED196-CDE6-4685-B094-3276C7F129F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {11FED196-CDE6-4685-B094-3276C7F129F9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {11FED196-CDE6-4685-B094-3276C7F129F9}.Debug|ARM.ActiveCfg = Debug|ARM + {11FED196-CDE6-4685-B094-3276C7F129F9}.Debug|ARM.Build.0 = Debug|ARM + {11FED196-CDE6-4685-B094-3276C7F129F9}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {11FED196-CDE6-4685-B094-3276C7F129F9}.Debug|ARM64.Build.0 = Debug|ARM64 + {11FED196-CDE6-4685-B094-3276C7F129F9}.Debug|x64.ActiveCfg = Debug|x64 + {11FED196-CDE6-4685-B094-3276C7F129F9}.Debug|x64.Build.0 = Debug|x64 + {11FED196-CDE6-4685-B094-3276C7F129F9}.Debug|x86.ActiveCfg = Debug|x86 + {11FED196-CDE6-4685-B094-3276C7F129F9}.Debug|x86.Build.0 = Debug|x86 + {11FED196-CDE6-4685-B094-3276C7F129F9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {11FED196-CDE6-4685-B094-3276C7F129F9}.Release|Any CPU.Build.0 = Release|Any CPU + {11FED196-CDE6-4685-B094-3276C7F129F9}.Release|ARM.ActiveCfg = Release|ARM + {11FED196-CDE6-4685-B094-3276C7F129F9}.Release|ARM.Build.0 = Release|ARM + {11FED196-CDE6-4685-B094-3276C7F129F9}.Release|ARM64.ActiveCfg = Release|ARM64 + {11FED196-CDE6-4685-B094-3276C7F129F9}.Release|ARM64.Build.0 = Release|ARM64 + {11FED196-CDE6-4685-B094-3276C7F129F9}.Release|x64.ActiveCfg = Release|x64 + {11FED196-CDE6-4685-B094-3276C7F129F9}.Release|x64.Build.0 = Release|x64 + {11FED196-CDE6-4685-B094-3276C7F129F9}.Release|x86.ActiveCfg = Release|x86 + {11FED196-CDE6-4685-B094-3276C7F129F9}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {A29722C2-BB0B-41C4-8925-3DFE6A793CD4} + EndGlobalSection +EndGlobal diff --git a/Models/Enums/MailType.cs b/Models/Enums/MailType.cs new file mode 100644 index 0000000..bc388d4 --- /dev/null +++ b/Models/Enums/MailType.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MicaApps.Upw.Mail.Models.Enums +{ + internal enum MailType + { + + } +} diff --git a/Models/ImapInfo.cs b/Models/ImapInfo.cs new file mode 100644 index 0000000..2d13dd7 --- /dev/null +++ b/Models/ImapInfo.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using MailKit.Security; +using MailKit; +using MailKit.Net.Imap; +using System.Xml.Linq; +using Microsoft.Extensions.DependencyInjection; +using Windows.ApplicationModel.Resources; +using System.IO; +using System.Threading; +using Windows.Media.Protection.PlayReady; + +namespace MicaApps.Upw.Mail.Models +{ + internal class ImapInfo : ImapClient + { + //private readonly ResourceLoader resourceLoader = ResourceLoader.GetStringForReference(); + public string host { get;private set; } + public int port { get; private set; } + public SecureSocketOptions secureSocketOptions { get; set; } = SecureSocketOptions.SslOnConnect; + public ImapImplementation imapImplementation { get; set; } + public ImapInfo(string host,int port) + { + this.host = host; + this.port = port; + this.imapImplementation = new ImapImplementation + { + Name = @"MicaApps.Mail.UWP", + Version = @"1.0", + }; + } + + public async Task ConnectAsync(string username,string authorizationCode) + { + + try + { + // 连接到 IMAP 服务器 + await this.ConnectAsync(this.host, this.port, this.secureSocketOptions); + // 添加客户端身份标识 + _ = await this.IdentifyAsync(this.imapImplementation); + // 身份验证 + await this.AuthenticateAsync(username, authorizationCode); + } + catch (AuthenticationException ex) + { + throw new Exception(ex.Message); + } + catch(Exception ex) + { + throw new Exception(ex.Message); + } + } + + + + + + } +} diff --git a/Models/Letter.cs b/Models/Letter.cs new file mode 100644 index 0000000..2418817 --- /dev/null +++ b/Models/Letter.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using MimeKit; + +namespace MicaApps.Upw.Mail.Models +{ + /// + /// 专门用于储存每封信件 + /// + internal class Letter :MimeMessage + { + + + + } +} diff --git a/Models/UserData.cs b/Models/UserData.cs new file mode 100644 index 0000000..ee554f9 --- /dev/null +++ b/Models/UserData.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MicaApps.Upw.Mail.Models +{ + internal abstract class UserData + { + public string username { get; set; } = string.Empty; + + + public List letters { get; set; } = new List(); + + + public bool isEmpty { get => string.IsNullOrEmpty(username); } + + + + public abstract Task LoginIn(); + + + } +} diff --git a/Models/UserDataByImap.cs b/Models/UserDataByImap.cs new file mode 100644 index 0000000..cb58a75 --- /dev/null +++ b/Models/UserDataByImap.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using MimeKit; +using MailKit.Net.Imap; +using MailKit.Security; +using Windows.UI.Xaml; + +namespace MicaApps.Upw.Mail.Models +{ + /// + /// 通过Imap来获取信息 + /// + internal class UserDataByImap : UserData + { + public ImapInfo imapInfo { get; set; } + + /// + /// 授权码 + /// + public string authorizationCode { get; set; } + + public UserDataByImap(string username,string authorizationCode,ImapInfo imapInfo) + { + this.username = username; + this.authorizationCode = authorizationCode; + this.imapInfo = imapInfo; + } + + + public override async Task LoginIn() + { + await this.imapInfo.ConnectAsync(this.username,this.authorizationCode); + } + + } +} diff --git a/Package.appxmanifest b/Package.appxmanifest new file mode 100644 index 0000000..1a5ed77 --- /dev/null +++ b/Package.appxmanifest @@ -0,0 +1,49 @@ + + + + + + + + + + KalevaAalto.Upw.Mail + kalev + Assets\StoreLogo.png + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Pages/HomePagel.xaml b/Pages/HomePagel.xaml new file mode 100644 index 0000000..65336be --- /dev/null +++ b/Pages/HomePagel.xaml @@ -0,0 +1,21 @@ + + + + + + 收件箱 + 发件箱 + + + + + + diff --git a/Pages/HomePagel.xaml.cs b/Pages/HomePagel.xaml.cs new file mode 100644 index 0000000..c68b38f --- /dev/null +++ b/Pages/HomePagel.xaml.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + +// https://go.microsoft.com/fwlink/?LinkId=234238 上介绍了“空白页”项模板 + +namespace MicaApps.Upw.Mail.Pages +{ + /// + /// 可用于自身或导航至 Frame 内部的空白页。 + /// + public sealed partial class HomePagel : Page + { + public HomePagel() + { + this.InitializeComponent(); + } + + private void NavigationView_ItemInvoked(NavigationView sender, NavigationViewItemInvokedEventArgs args) + { + // 获取点击的菜单项的 Tag + string tag = args.InvokedItemContainer.Tag.ToString(); + + // 根据 Tag 导航到相应的页面 + switch (tag) + { + case @"receive": + this.frame_main.Navigate(typeof(MailPage),tag); + break; + } + } + } +} diff --git a/Pages/Login/LoginByImapPage.xaml b/Pages/Login/LoginByImapPage.xaml new file mode 100644 index 0000000..06963da --- /dev/null +++ b/Pages/Login/LoginByImapPage.xaml @@ -0,0 +1,49 @@ + + + 10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pages/Login/LoginByImapPage.xaml.cs b/Pages/Login/LoginByImapPage.xaml.cs new file mode 100644 index 0000000..696c3d4 --- /dev/null +++ b/Pages/Login/LoginByImapPage.xaml.cs @@ -0,0 +1,92 @@ +using MicaApps.Upw.Mail.Models; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + +// https://go.microsoft.com/fwlink/?LinkId=234238 上介绍了“空白页”项模板 + +namespace MicaApps.Upw.Mail.Pages.Login +{ + /// + /// 可用于自身或导航至 Frame 内部的空白页。 + /// + public sealed partial class LoginByImapPage : Page + { + private readonly Services.StaticValues staticValues = App.Services.GetService(); + private readonly Services.LoginStatus loginStatus = App.Services.GetService(); + + public LoginByImapPage() + { + this.InitializeComponent(); + } + + private void combox_mailhost_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + Grid grid = new Grid(); + var m = grid.Margin; + } + + + private string username { get => this.textbox_username.Text + '@' + this.combox_mailhost; } + private string password { get => this.textbox_password.Text; } + private string host { get=>this.textbox_host.Text; } + private int port { get => Convert.ToInt32(this.textbox_port.Text); } + + + private async void Button_Login_Click(object sender, RoutedEventArgs e) + { + + this.loginStatus.userData = new UserDataByImap( + this.username, + this.password, + new ImapInfo(this.host, this.port) + ); + + return; + + + try + { + this.loginStatus.userData = new UserDataByImap( + this.username, + this.password, + new ImapInfo(this.host,this.port) + ); + + //this.Frame.Navigate(typeof(HomePagel)); + + + } + catch(Exception ex) + { + // 创建 ContentDialog + ContentDialog dialog = new ContentDialog + { + Title = "登录失败", + Content = ex.Message, + CloseButtonText = "关闭" + }; + + // 显示提示框并等待用户响应 + ContentDialogResult result = await dialog.ShowAsync(); + } + } + + private void Button_Back_Click(object sender, RoutedEventArgs e) + { + this.Frame.Navigate(typeof(LoginPage)); + } + } +} diff --git a/Pages/LoginPage.xaml b/Pages/LoginPage.xaml new file mode 100644 index 0000000..0674ae1 --- /dev/null +++ b/Pages/LoginPage.xaml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + diff --git a/Pages/LoginPage.xaml.cs b/Pages/LoginPage.xaml.cs new file mode 100644 index 0000000..ec87354 --- /dev/null +++ b/Pages/LoginPage.xaml.cs @@ -0,0 +1,80 @@ +using MicaApps.Upw.Mail.Controls; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.Devices.Enumeration; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + +// https://go.microsoft.com/fwlink/?LinkId=234238 上介绍了“空白页”项模板 + +namespace MicaApps.Upw.Mail.Pages +{ + /// + /// 可用于自身或导航至 Frame 内部的空白页。 + /// + public sealed partial class LoginPage : Page + { + public LoginPage() + { + this.InitializeComponent(); + } + + + /// + /// 页面加载函数 + /// + /// + /// + private void Page_Loaded(object sender, RoutedEventArgs e) + { + + } + + private void Button_Login_Click(object sender, RoutedEventArgs e) + { + if (sender is LoginButton button) + { + object tagValue = button.Tag; + + if (tagValue != null) + { + // 在这里使用按钮的 Tag 属性值 + string tagString = tagValue.ToString(); + // 其他处理逻辑... + switch (tagString) + { + case @"other": + this.Frame.Navigate(typeof(Login.LoginByImapPage)); + break; + } + } + } + } + + + private void Button_Test_Click(object sender, RoutedEventArgs e) + { +#if DEBUG + this.Frame.Navigate(typeof(HomePagel)); +#endif + } + + + + + private void NavigationView_ItemInvoked(NavigationView sender, NavigationViewItemInvokedEventArgs args) + { + + } + } +} diff --git a/Pages/MailPage.xaml b/Pages/MailPage.xaml new file mode 100644 index 0000000..d4758ac --- /dev/null +++ b/Pages/MailPage.xaml @@ -0,0 +1,17 @@ + + + + + + + + + diff --git a/Pages/MailPage.xaml.cs b/Pages/MailPage.xaml.cs new file mode 100644 index 0000000..da0fd2a --- /dev/null +++ b/Pages/MailPage.xaml.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + +// https://go.microsoft.com/fwlink/?LinkId=234238 上介绍了“空白页”项模板 + +namespace MicaApps.Upw.Mail.Pages +{ + /// + /// 可用于自身或导航至 Frame 内部的空白页。 + /// + public sealed partial class MailPage : Page + { + private string tag; + public MailPage() + { + this.InitializeComponent(); + } + + + /// + /// 处理传递过来参数 + /// + protected override void OnNavigatedTo(NavigationEventArgs e) + { + base.OnNavigatedTo(e); + + if (e.Parameter != null) + { + // 处理传递过来的参数 + this.tag = (string)e.Parameter; + // 在这里添加你的逻辑 + this.textbox_test.Text = this.tag; + } + } + } +} diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..97d1f68 --- /dev/null +++ b/Properties/AssemblyInfo.cs @@ -0,0 +1,29 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("KalevaAalto.Upw.Mail")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("KalevaAalto.Upw.Mail")] +[assembly: AssemblyCopyright("Copyright © 2023")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 +//通过使用 "*",如下所示: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: ComVisible(false)] \ No newline at end of file diff --git a/Properties/Default.rd.xml b/Properties/Default.rd.xml new file mode 100644 index 0000000..769324f --- /dev/null +++ b/Properties/Default.rd.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..09ff0f9 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# KalevaAalto.Upw.Mail \ No newline at end of file diff --git a/Resources/Strings.resw b/Resources/Strings.resw new file mode 100644 index 0000000..2380118 --- /dev/null +++ b/Resources/Strings.resw @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + MicaApps.Mail.UWP + + + 1.0 + + \ No newline at end of file diff --git a/Services/LoginStatus.cs b/Services/LoginStatus.cs new file mode 100644 index 0000000..cab7ab8 --- /dev/null +++ b/Services/LoginStatus.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Windows.UI.Xaml.Media.Animation; + +namespace MicaApps.Upw.Mail.Services +{ + internal class LoginStatus + { + private Models.UserData _userData; + public Models.UserData userData + { + get => this._userData; + set + { + Models.UserData userData = value; + try + { + userData.LoginIn(); + this._userData = userData; + } + catch + { + this._userData = null; + } + } + } + + + public bool isLogin { get => this._userData != null; } + + + } +} diff --git a/Services/StaticValues.cs b/Services/StaticValues.cs new file mode 100644 index 0000000..4b51c4b --- /dev/null +++ b/Services/StaticValues.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + + +namespace MicaApps.Upw.Mail.Services +{ + internal class StaticValues + { + + + + public Dictionary imapInfos { get; } = new Dictionary + { + { @"qq.com",new Models.ImapInfo(@"imap.qq.com",993) }, + { @"163.com",new Models.ImapInfo(@"imap.163.com",993) }, + }; + + + + } +}