Skip to content

Commit b04cf7f

Browse files
committed
Complete the service function
1 parent 192ab1f commit b04cf7f

3 files changed

Lines changed: 104 additions & 39 deletions

File tree

‎src/NETCore.MailKit/Core/EmailService.cs‎

Lines changed: 87 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1+
using MimeKit;
2+
using MimeKit.Text;
3+
using NETCore.MailKit.Shared;
14
using System;
25
using System.Collections.Generic;
6+
using System.Linq;
37
using System.Text;
48
using System.Threading.Tasks;
59

@@ -23,13 +27,9 @@ public EmailService(IMailKitProvider provider)
2327
/// <param name="isHtml">is set message as html</param>
2428
public void Send(string mailTo, string subject, string message, bool isHtml = false)
2529
{
26-
using (var client = _MailKitProvider.Client)
27-
{
28-
29-
}
30+
SendEmail(mailTo, null, null, subject, message, Encoding.UTF8, isHtml);
3031
}
3132

32-
3333
/// <summary>
3434
/// send email
3535
/// </summary>
@@ -40,10 +40,7 @@ public void Send(string mailTo, string subject, string message, bool isHtml = fa
4040
/// <param name="isHtml">is set message as html</param>
4141
public void Send(string mailTo, string subject, string message, Encoding encoding, bool isHtml = false)
4242
{
43-
using (var client = _MailKitProvider.Client)
44-
{
45-
46-
}
43+
SendEmail(mailTo, null, null, subject, message, encoding, isHtml);
4744
}
4845

4946
/// <summary>
@@ -57,10 +54,7 @@ public void Send(string mailTo, string subject, string message, Encoding encodin
5754
/// <param name="isHtml">is set message as html</param>
5855
public void Send(string mailTo, string mailCc, string mailBcc, string subject, string message, bool isHtml = false)
5956
{
60-
using (var client = _MailKitProvider.Client)
61-
{
62-
63-
}
57+
SendEmail(mailTo, mailCc, mailBcc, subject, message, Encoding.UTF8, isHtml);
6458
}
6559

6660
/// <summary>
@@ -75,10 +69,7 @@ public void Send(string mailTo, string mailCc, string mailBcc, string subject, s
7569
/// <param name="isHtml">is set message as html</param>
7670
public void Send(string mailTo, string mailCc, string mailBcc, string subject, string message, Encoding encoding, bool isHtml = false)
7771
{
78-
using (var client = _MailKitProvider.Client)
79-
{
80-
81-
}
72+
SendEmail(mailTo, mailCc, mailBcc, subject, message, encoding, isHtml);
8273
}
8374

8475

@@ -93,10 +84,7 @@ public Task SendAsync(string mailTo, string subject, string message, bool isHtml
9384
{
9485
return Task.Factory.StartNew(() =>
9586
{
96-
using (var client = _MailKitProvider.Client)
97-
{
98-
99-
}
87+
SendEmail(mailTo, null, null, subject, message, Encoding.UTF8, isHtml);
10088
});
10189
}
10290

@@ -113,10 +101,7 @@ public Task SendAsync(string mailTo, string subject, string message, Encoding en
113101
{
114102
return Task.Factory.StartNew(() =>
115103
{
116-
using (var client = _MailKitProvider.Client)
117-
{
118-
119-
}
104+
SendEmail(mailTo, null, null, subject, message, encoding, isHtml);
120105
});
121106
}
122107

@@ -133,10 +118,7 @@ public Task SendAsync(string mailTo, string mailCc, string mailBcc, string subje
133118
{
134119
return Task.Factory.StartNew(() =>
135120
{
136-
using (var client = _MailKitProvider.Client)
137-
{
138-
139-
}
121+
SendEmail(mailTo, mailCc, mailBcc, subject, message, Encoding.UTF8, isHtml);
140122
});
141123
}
142124

@@ -154,11 +136,83 @@ public Task SendAsync(string mailTo, string mailCc, string mailBcc, string subje
154136
{
155137
return Task.Factory.StartNew(() =>
156138
{
157-
using (var client = _MailKitProvider.Client)
158-
{
159-
160-
}
139+
SendEmail(mailTo, mailCc, mailBcc, subject, message, encoding, isHtml);
161140
});
162141
}
142+
143+
/// <summary>
144+
///
145+
/// </summary>
146+
/// <param name="mailTo"></param>
147+
/// <param name="mailCc"></param>
148+
/// <param name="mailBcc"></param>
149+
/// <param name="subject"></param>
150+
/// <param name="message"></param>
151+
/// <param name="encoding"></param>
152+
/// <param name="isHtml"></param>
153+
private void SendEmail(string mailTo, string mailCc, string mailBcc, string subject, string message, Encoding encoding, bool isHtml)
154+
{
155+
var _to = new string[0];
156+
var _cc = new string[0];
157+
var _bcc = new string[0];
158+
if (!string.IsNullOrEmpty(mailTo))
159+
_to = mailTo.Split(',').Select(x => x.Trim()).ToArray();
160+
if (!string.IsNullOrEmpty(mailCc))
161+
_cc = mailCc.Split(',').Select(x => x.Trim()).ToArray();
162+
if (!string.IsNullOrEmpty(mailBcc))
163+
_bcc = mailBcc.Split(',').Select(x => x.Trim()).ToArray();
164+
165+
Check.Argument.IsNotEmpty(_to, nameof(mailTo));
166+
Check.Argument.IsNotEmpty(message, nameof(message));
167+
168+
var mimeMessage = new MimeMessage();
169+
170+
//add mail from
171+
mimeMessage.From.Add(new MailboxAddress(_MailKitProvider.Options.SenderName, _MailKitProvider.Options.SenderEmail));
172+
173+
//add mail to
174+
foreach (var to in _to)
175+
{
176+
mimeMessage.To.Add(new MailboxAddress("", to));
177+
}
178+
179+
//add mail cc
180+
foreach (var cc in _cc)
181+
{
182+
mimeMessage.Cc.Add(new MailboxAddress("", cc));
183+
}
184+
185+
//add mail bcc
186+
foreach (var bcc in _bcc)
187+
{
188+
mimeMessage.Bcc.Add(new MailboxAddress("", bcc));
189+
}
190+
191+
//add subject
192+
mimeMessage.Subject = subject;
193+
194+
//add email body
195+
TextPart body = null;
196+
197+
if (isHtml)
198+
{
199+
200+
body = new TextPart(TextFormat.Html);
201+
}
202+
else
203+
{
204+
body = new TextPart(TextFormat.Text);
205+
}
206+
//set email encoding
207+
body.SetText(encoding, message);
208+
209+
//set email body
210+
mimeMessage.Body = body;
211+
212+
using (var client = _MailKitProvider.Client)
213+
{
214+
client.Send(mimeMessage);
215+
}
216+
}
163217
}
164218
}

‎src/NETCore.MailKit/IMailKitProvider.cs‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
using MailKit.Net.Smtp;
2+
using NETCore.MailKit.Infrastructure.Internal;
23
using System;
34

45
namespace NETCore.MailKit
56
{
67
public interface IMailKitProvider
78
{
9+
/// <summary>
10+
/// mailkit options
11+
/// </summary>
12+
MailKitOptions Options { get; }
13+
814
/// <summary>
915
/// smtp client
1016
/// </summary>

‎src/NETCore.MailKit/MailKitProvider.cs‎

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ namespace NETCore.MailKit
99
{
1010
public class MailKitProvider : IMailKitProvider
1111
{
12-
public readonly MailKitOptions _MailKitOptions;
12+
public MailKitOptions Options { get; private set; }
1313

1414
public MailKitProvider(MailKitOptions mailKitOptions)
1515
{
16-
_MailKitOptions = mailKitOptions;
16+
Options = mailKitOptions;
1717
}
1818

1919
public SmtpClient Client
@@ -24,7 +24,6 @@ public SmtpClient Client
2424
}
2525
}
2626

27-
2827
private Lazy<SmtpClient> lazySmtpClient()
2928
{
3029
return new Lazy<SmtpClient>(() =>
@@ -36,15 +35,21 @@ private Lazy<SmtpClient> lazySmtpClient()
3635
private SmtpClient InitSmtpClient()
3736
{
3837
var client = new SmtpClient();
39-
if (_MailKitOptions.SSL)
38+
if (Options.SSL)
4039
{
41-
client.Connect(_MailKitOptions.Server, _MailKitOptions.Port, SecureSocketOptions.None);
40+
client.Connect(Options.Server, Options.Port, SecureSocketOptions.None);
4241
}
4342
else
4443
{
45-
client.Connect(_MailKitOptions.Server, _MailKitOptions.Port, SecureSocketOptions.SslOnConnect);
44+
client.Connect(Options.Server, Options.Port, SecureSocketOptions.SslOnConnect);
4645
}
4746

47+
// Note: since we don't have an OAuth2 token, disable
48+
// the XOAUTH2 authentication mechanism.
49+
client.AuthenticationMechanisms.Remove("XOAUTH2");
50+
// user login smtp server
51+
client.Authenticate(Options.Account, Options.Passord);
52+
4853
return client;
4954
}
5055
}

0 commit comments

Comments
 (0)