yuqian 8 lat temu
commit
f18c8f7d11

+ 63 - 0
.gitattributes

@@ -0,0 +1,63 @@
1
+###############################################################################
2
+# Set default behavior to automatically normalize line endings.
3
+###############################################################################
4
+* text=auto
5
+
6
+###############################################################################
7
+# Set default behavior for command prompt diff.
8
+#
9
+# This is need for earlier builds of msysgit that does not have it on by
10
+# default for csharp files.
11
+# Note: This is only used by command line
12
+###############################################################################
13
+#*.cs     diff=csharp
14
+
15
+###############################################################################
16
+# Set the merge driver for project and solution files
17
+#
18
+# Merging from the command prompt will add diff markers to the files if there
19
+# are conflicts (Merging from VS is not affected by the settings below, in VS
20
+# the diff markers are never inserted). Diff markers may cause the following 
21
+# file extensions to fail to load in VS. An alternative would be to treat
22
+# these files as binary and thus will always conflict and require user
23
+# intervention with every merge. To do so, just uncomment the entries below
24
+###############################################################################
25
+#*.sln       merge=binary
26
+#*.csproj    merge=binary
27
+#*.vbproj    merge=binary
28
+#*.vcxproj   merge=binary
29
+#*.vcproj    merge=binary
30
+#*.dbproj    merge=binary
31
+#*.fsproj    merge=binary
32
+#*.lsproj    merge=binary
33
+#*.wixproj   merge=binary
34
+#*.modelproj merge=binary
35
+#*.sqlproj   merge=binary
36
+#*.wwaproj   merge=binary
37
+
38
+###############################################################################
39
+# behavior for image files
40
+#
41
+# image files are treated as binary by default.
42
+###############################################################################
43
+#*.jpg   binary
44
+#*.png   binary
45
+#*.gif   binary
46
+
47
+###############################################################################
48
+# diff behavior for common document formats
49
+# 
50
+# Convert binary document formats to text before diffing them. This feature
51
+# is only available from the command line. Turn it on by uncommenting the 
52
+# entries below.
53
+###############################################################################
54
+#*.doc   diff=astextplain
55
+#*.DOC   diff=astextplain
56
+#*.docx  diff=astextplain
57
+#*.DOCX  diff=astextplain
58
+#*.dot   diff=astextplain
59
+#*.DOT   diff=astextplain
60
+#*.pdf   diff=astextplain
61
+#*.PDF   diff=astextplain
62
+#*.rtf   diff=astextplain
63
+#*.RTF   diff=astextplain

+ 261 - 0
.gitignore

@@ -0,0 +1,261 @@
1
+## Ignore Visual Studio temporary files, build results, and
2
+## files generated by popular Visual Studio add-ons.
3
+
4
+# User-specific files
5
+*.suo
6
+*.user
7
+*.userosscache
8
+*.sln.docstates
9
+
10
+# User-specific files (MonoDevelop/Xamarin Studio)
11
+*.userprefs
12
+
13
+# Build results
14
+[Dd]ebug/
15
+[Dd]ebugPublic/
16
+[Rr]elease/
17
+[Rr]eleases/
18
+x64/
19
+x86/
20
+bld/
21
+[Bb]in/
22
+[Oo]bj/
23
+[Ll]og/
24
+
25
+# Visual Studio 2015 cache/options directory
26
+.vs/
27
+# Uncomment if you have tasks that create the project's static files in wwwroot
28
+#wwwroot/
29
+
30
+# MSTest test Results
31
+[Tt]est[Rr]esult*/
32
+[Bb]uild[Ll]og.*
33
+
34
+# NUNIT
35
+*.VisualState.xml
36
+TestResult.xml
37
+
38
+# Build Results of an ATL Project
39
+[Dd]ebugPS/
40
+[Rr]eleasePS/
41
+dlldata.c
42
+
43
+# DNX
44
+project.lock.json
45
+project.fragment.lock.json
46
+artifacts/
47
+
48
+*_i.c
49
+*_p.c
50
+*_i.h
51
+*.ilk
52
+*.meta
53
+*.obj
54
+*.pch
55
+*.pdb
56
+*.pgc
57
+*.pgd
58
+*.rsp
59
+*.sbr
60
+*.tlb
61
+*.tli
62
+*.tlh
63
+*.tmp
64
+*.tmp_proj
65
+*.log
66
+*.vspscc
67
+*.vssscc
68
+.builds
69
+*.pidb
70
+*.svclog
71
+*.scc
72
+
73
+# Chutzpah Test files
74
+_Chutzpah*
75
+
76
+# Visual C++ cache files
77
+ipch/
78
+*.aps
79
+*.ncb
80
+*.opendb
81
+*.opensdf
82
+*.sdf
83
+*.cachefile
84
+*.VC.db
85
+*.VC.VC.opendb
86
+
87
+# Visual Studio profiler
88
+*.psess
89
+*.vsp
90
+*.vspx
91
+*.sap
92
+
93
+# TFS 2012 Local Workspace
94
+$tf/
95
+
96
+# Guidance Automation Toolkit
97
+*.gpState
98
+
99
+# ReSharper is a .NET coding add-in
100
+_ReSharper*/
101
+*.[Rr]e[Ss]harper
102
+*.DotSettings.user
103
+
104
+# JustCode is a .NET coding add-in
105
+.JustCode
106
+
107
+# TeamCity is a build add-in
108
+_TeamCity*
109
+
110
+# DotCover is a Code Coverage Tool
111
+*.dotCover
112
+
113
+# NCrunch
114
+_NCrunch_*
115
+.*crunch*.local.xml
116
+nCrunchTemp_*
117
+
118
+# MightyMoose
119
+*.mm.*
120
+AutoTest.Net/
121
+
122
+# Web workbench (sass)
123
+.sass-cache/
124
+
125
+# Installshield output folder
126
+[Ee]xpress/
127
+
128
+# DocProject is a documentation generator add-in
129
+DocProject/buildhelp/
130
+DocProject/Help/*.HxT
131
+DocProject/Help/*.HxC
132
+DocProject/Help/*.hhc
133
+DocProject/Help/*.hhk
134
+DocProject/Help/*.hhp
135
+DocProject/Help/Html2
136
+DocProject/Help/html
137
+
138
+# Click-Once directory
139
+publish/
140
+
141
+# Publish Web Output
142
+*.[Pp]ublish.xml
143
+*.azurePubxml
144
+# TODO: Comment the next line if you want to checkin your web deploy settings
145
+# but database connection strings (with potential passwords) will be unencrypted
146
+#*.pubxml
147
+*.publishproj
148
+
149
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
150
+# checkin your Azure Web App publish settings, but sensitive information contained
151
+# in these scripts will be unencrypted
152
+PublishScripts/
153
+
154
+# NuGet Packages
155
+*.nupkg
156
+# The packages folder can be ignored because of Package Restore
157
+**/packages/*
158
+# except build/, which is used as an MSBuild target.
159
+!**/packages/build/
160
+# Uncomment if necessary however generally it will be regenerated when needed
161
+#!**/packages/repositories.config
162
+# NuGet v3's project.json files produces more ignoreable files
163
+*.nuget.props
164
+*.nuget.targets
165
+
166
+# Microsoft Azure Build Output
167
+csx/
168
+*.build.csdef
169
+
170
+# Microsoft Azure Emulator
171
+ecf/
172
+rcf/
173
+
174
+# Windows Store app package directories and files
175
+AppPackages/
176
+BundleArtifacts/
177
+Package.StoreAssociation.xml
178
+_pkginfo.txt
179
+
180
+# Visual Studio cache files
181
+# files ending in .cache can be ignored
182
+*.[Cc]ache
183
+# but keep track of directories ending in .cache
184
+!*.[Cc]ache/
185
+
186
+# Others
187
+ClientBin/
188
+~$*
189
+*~
190
+*.dbmdl
191
+*.dbproj.schemaview
192
+*.jfm
193
+*.pfx
194
+*.publishsettings
195
+node_modules/
196
+orleans.codegen.cs
197
+
198
+# Since there are multiple workflows, uncomment next line to ignore bower_components
199
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
200
+#bower_components/
201
+
202
+# RIA/Silverlight projects
203
+Generated_Code/
204
+
205
+# Backup & report files from converting an old project file
206
+# to a newer Visual Studio version. Backup files are not needed,
207
+# because we have git ;-)
208
+_UpgradeReport_Files/
209
+Backup*/
210
+UpgradeLog*.XML
211
+UpgradeLog*.htm
212
+
213
+# SQL Server files
214
+*.mdf
215
+*.ldf
216
+
217
+# Business Intelligence projects
218
+*.rdl.data
219
+*.bim.layout
220
+*.bim_*.settings
221
+
222
+# Microsoft Fakes
223
+FakesAssemblies/
224
+
225
+# GhostDoc plugin setting file
226
+*.GhostDoc.xml
227
+
228
+# Node.js Tools for Visual Studio
229
+.ntvs_analysis.dat
230
+
231
+# Visual Studio 6 build log
232
+*.plg
233
+
234
+# Visual Studio 6 workspace options file
235
+*.opt
236
+
237
+# Visual Studio LightSwitch build output
238
+**/*.HTMLClient/GeneratedArtifacts
239
+**/*.DesktopClient/GeneratedArtifacts
240
+**/*.DesktopClient/ModelManifest.xml
241
+**/*.Server/GeneratedArtifacts
242
+**/*.Server/ModelManifest.xml
243
+_Pvt_Extensions
244
+
245
+# Paket dependency manager
246
+.paket/paket.exe
247
+paket-files/
248
+
249
+# FAKE - F# Make
250
+.fake/
251
+
252
+# JetBrains Rider
253
+.idea/
254
+*.sln.iml
255
+
256
+# CodeRush
257
+.cr/
258
+
259
+# Python Tools for Visual Studio (PTVS)
260
+__pycache__/
261
+*.pyc

+ 31 - 0
DemoMailKit/DemoMailKit.sln

@@ -0,0 +1,31 @@
1
+
2
+Microsoft Visual Studio Solution File, Format Version 12.00
3
+# Visual Studio 15
4
+VisualStudioVersion = 15.0.27130.2024
5
+MinimumVisualStudioVersion = 10.0.40219.1
6
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyMailKit", "MyMailKit\MyMailKit.csproj", "{BAAB7575-0382-46FF-8645-E566AA36A198}"
7
+EndProject
8
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Utility", "Utility\Utility.csproj", "{49A9CCEF-7B2D-4A28-A59A-B2CB5F608896}"
9
+EndProject
10
+Global
11
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
12
+		Debug|Any CPU = Debug|Any CPU
13
+		Release|Any CPU = Release|Any CPU
14
+	EndGlobalSection
15
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
16
+		{BAAB7575-0382-46FF-8645-E566AA36A198}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
17
+		{BAAB7575-0382-46FF-8645-E566AA36A198}.Debug|Any CPU.Build.0 = Debug|Any CPU
18
+		{BAAB7575-0382-46FF-8645-E566AA36A198}.Release|Any CPU.ActiveCfg = Release|Any CPU
19
+		{BAAB7575-0382-46FF-8645-E566AA36A198}.Release|Any CPU.Build.0 = Release|Any CPU
20
+		{49A9CCEF-7B2D-4A28-A59A-B2CB5F608896}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
21
+		{49A9CCEF-7B2D-4A28-A59A-B2CB5F608896}.Debug|Any CPU.Build.0 = Debug|Any CPU
22
+		{49A9CCEF-7B2D-4A28-A59A-B2CB5F608896}.Release|Any CPU.ActiveCfg = Release|Any CPU
23
+		{49A9CCEF-7B2D-4A28-A59A-B2CB5F608896}.Release|Any CPU.Build.0 = Release|Any CPU
24
+	EndGlobalSection
25
+	GlobalSection(SolutionProperties) = preSolution
26
+		HideSolutionNode = FALSE
27
+	EndGlobalSection
28
+	GlobalSection(ExtensibilityGlobals) = postSolution
29
+		SolutionGuid = {CCE4CEA9-6B31-4BEC-A850-8D7352FA1032}
30
+	EndGlobalSection
31
+EndGlobal

+ 7 - 0
DemoMailKit/MyMailKit/Config/Mail.json

@@ -0,0 +1,7 @@
1
+{
2
+  "Name": "MyMailSys",
3
+  "Host": "smtp.163.com",
4
+  "Address": "yq1989135147@163.com",
5
+  "Password": "yq@198913",
6
+  "Port": 25
7
+}

+ 49 - 0
DemoMailKit/MyMailKit/Controllers/MailController.cs

@@ -0,0 +1,49 @@
1
+using System;
2
+using System.Collections.Generic;
3
+using System.IO;
4
+using System.Linq;
5
+using System.Threading.Tasks;
6
+using Microsoft.AspNetCore.Mvc;
7
+using Microsoft.Extensions.Options;
8
+using MyMailKit.Models.Dtos;
9
+using Utility;
10
+using Utility.Mail;
11
+
12
+// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
13
+
14
+namespace MyMailKit.Controllers
15
+{
16
+
17
+    [Route("mailapi/Mail/[action]")]
18
+    public class MailController : Controller
19
+    {
20
+        private readonly MailConfig mailConfig;
21
+        public MailController(IOptions<MailConfig> configClassAccesser)
22
+        {
23
+            mailConfig = configClassAccesser.Value;
24
+        }
25
+
26
+        [HttpPost]
27
+        public async Task<string> SendMail(MailDto dto)
28
+        {
29
+            List<string> fileNameList = new List<string>();
30
+            List<Stream> streamList = new List<Stream>();
31
+            var files = Request.Form.Files;
32
+            foreach (var item in files)
33
+            {
34
+                var fileName = item.FileName;
35
+                var memoryStream = new MemoryStream();
36
+                await item.CopyToAsync(memoryStream);
37
+                streamList.Add(memoryStream);
38
+                fileNameList.Add(fileName);
39
+            }
40
+
41
+
42
+            var flag = MailUtil.SendMail(mailConfig, dto.AddressList, dto.Title, dto.Content, streamList, fileNameList).Result;
43
+            if (flag)
44
+                return "发送成功!";
45
+            return "发送失败";
46
+        }
47
+
48
+    }
49
+}

+ 23 - 0
DemoMailKit/MyMailKit/Models/Dtos/MailDtos.cs

@@ -0,0 +1,23 @@
1
+using System;
2
+using System.Collections.Generic;
3
+using System.Linq;
4
+using System.Threading.Tasks;
5
+
6
+namespace MyMailKit.Models.Dtos
7
+{
8
+    public class MailDto
9
+    {
10
+        /// <summary>
11
+        /// 邮件标题
12
+        /// </summary>
13
+        public string Title { get; set; } = "";
14
+        /// <summary>
15
+        /// 邮件内容(纯文本/html)
16
+        /// </summary>
17
+        public string Content { get; set; } = "";
18
+        /// <summary>
19
+        /// 收件方邮件地址列表
20
+        /// </summary>
21
+        public List<string> AddressList { get; set; } = new List<string>();
22
+    }
23
+}

+ 30 - 0
DemoMailKit/MyMailKit/MyMailKit.csproj

@@ -0,0 +1,30 @@
1
+<Project Sdk="Microsoft.NET.Sdk.Web">
2
+
3
+  <PropertyGroup>
4
+    <TargetFramework>netcoreapp2.0</TargetFramework>
5
+  </PropertyGroup>
6
+
7
+  <ItemGroup>
8
+    <Folder Include="wwwroot\" />
9
+  </ItemGroup>
10
+
11
+  <ItemGroup>
12
+    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.5" />
13
+    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.2" />
14
+  </ItemGroup>
15
+
16
+  <ItemGroup>
17
+    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.2" />
18
+  </ItemGroup>
19
+
20
+  <ItemGroup>
21
+    <ProjectReference Include="..\Utility\Utility.csproj" />
22
+  </ItemGroup>
23
+
24
+  <ItemGroup>
25
+    <Content Update="Config\Mail.json">
26
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
27
+    </Content>
28
+  </ItemGroup>
29
+
30
+</Project>

+ 25 - 0
DemoMailKit/MyMailKit/Program.cs

@@ -0,0 +1,25 @@
1
+using System;
2
+using System.Collections.Generic;
3
+using System.IO;
4
+using System.Linq;
5
+using System.Threading.Tasks;
6
+using Microsoft.AspNetCore;
7
+using Microsoft.AspNetCore.Hosting;
8
+using Microsoft.Extensions.Configuration;
9
+using Microsoft.Extensions.Logging;
10
+
11
+namespace MyMailKit
12
+{
13
+    public class Program
14
+    {
15
+        public static void Main(string[] args)
16
+        {
17
+            BuildWebHost(args).Run();
18
+        }
19
+
20
+        public static IWebHost BuildWebHost(string[] args) =>
21
+            WebHost.CreateDefaultBuilder(args)
22
+                .UseStartup<Startup>()
23
+                .Build();
24
+    }
25
+}

+ 29 - 0
DemoMailKit/MyMailKit/Properties/launchSettings.json

@@ -0,0 +1,29 @@
1
+{
2
+  "iisSettings": {
3
+    "windowsAuthentication": false,
4
+    "anonymousAuthentication": true,
5
+    "iisExpress": {
6
+      "applicationUrl": "http://localhost:8600/",
7
+      "sslPort": 0
8
+    }
9
+  },
10
+  "profiles": {
11
+    "IIS Express": {
12
+      "commandName": "IISExpress",
13
+      "launchBrowser": true,
14
+      "launchUrl": "api/values",
15
+      "environmentVariables": {
16
+        "ASPNETCORE_ENVIRONMENT": "Development"
17
+      }
18
+    },
19
+    "MyMailKit": {
20
+      "commandName": "Project",
21
+      "launchBrowser": true,
22
+      "launchUrl": "api/values",
23
+      "environmentVariables": {
24
+        "ASPNETCORE_ENVIRONMENT": "Development"
25
+      },
26
+      "applicationUrl": "http://localhost:8601/"
27
+    }
28
+  }
29
+}

+ 46 - 0
DemoMailKit/MyMailKit/Startup.cs

@@ -0,0 +1,46 @@
1
+using System;
2
+using System.Collections.Generic;
3
+using System.Linq;
4
+using System.Threading.Tasks;
5
+using Microsoft.AspNetCore.Builder;
6
+using Microsoft.AspNetCore.Hosting;
7
+using Microsoft.Extensions.Configuration;
8
+using Microsoft.Extensions.DependencyInjection;
9
+using Microsoft.Extensions.Logging;
10
+using Microsoft.Extensions.Options;
11
+using Utility.Mail;
12
+
13
+namespace MyMailKit
14
+{
15
+    public class Startup
16
+    {
17
+        public Startup(IConfiguration configuration)
18
+        {
19
+            Configuration = configuration;
20
+            var builder = new ConfigurationBuilder()
21
+                .AddJsonFile("Config/Mail.json");
22
+            Configuration = builder.Build();
23
+        }
24
+
25
+        public IConfiguration Configuration { get; }
26
+
27
+        // This method gets called by the runtime. Use this method to add services to the container.
28
+        public void ConfigureServices(IServiceCollection services)
29
+        {
30
+            services.Configure<MailConfig>(Configuration);
31
+
32
+            services.AddMvc();
33
+        }
34
+
35
+        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
36
+        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
37
+        {
38
+            if (env.IsDevelopment())
39
+            {
40
+                app.UseDeveloperExceptionPage();
41
+            }
42
+
43
+            app.UseMvc();
44
+        }
45
+    }
46
+}

+ 10 - 0
DemoMailKit/MyMailKit/appsettings.Development.json

@@ -0,0 +1,10 @@
1
+{
2
+  "Logging": {
3
+    "IncludeScopes": false,
4
+    "LogLevel": {
5
+      "Default": "Debug",
6
+      "System": "Information",
7
+      "Microsoft": "Information"
8
+    }
9
+  }
10
+}

+ 15 - 0
DemoMailKit/MyMailKit/appsettings.json

@@ -0,0 +1,15 @@
1
+{
2
+  "Logging": {
3
+    "IncludeScopes": false,
4
+    "Debug": {
5
+      "LogLevel": {
6
+        "Default": "Warning"
7
+      }
8
+    },
9
+    "Console": {
10
+      "LogLevel": {
11
+        "Default": "Warning"
12
+      }
13
+    }
14
+  }
15
+}

+ 32 - 0
DemoMailKit/Utility/Mail/MailConfig.cs

@@ -0,0 +1,32 @@
1
+using System;
2
+using System.Collections.Generic;
3
+using System.Linq;
4
+using System.Threading.Tasks;
5
+
6
+namespace Utility.Mail
7
+{
8
+    public class MailConfig
9
+    {
10
+        /// <summary>
11
+        /// 发件人名称(显示在发件邮箱的已发邮件中的发件人名称)
12
+        /// </summary>
13
+        public string Name { get; set; }
14
+        /// <summary>
15
+        /// 发件人邮箱地址
16
+        /// </summary>
17
+        public string Address { get; set; }
18
+        /// <summary>
19
+        /// 发件人邮箱密码
20
+        /// </summary>
21
+        public string Password { get; set; }
22
+        /// <summary>
23
+        /// 发件人邮箱SMTP服务器地址
24
+        /// </summary>
25
+        public string Host { get; set; }
26
+        /// <summary>
27
+        /// 端口
28
+        /// </summary>
29
+        public int Port { get; set; }
30
+
31
+    }
32
+}

+ 94 - 0
DemoMailKit/Utility/Mail/MailUtil.cs

@@ -0,0 +1,94 @@
1
+using MailKit.Net.Smtp;
2
+using MimeKit;
3
+using System;
4
+using System.Collections.Generic;
5
+using System.IO;
6
+using System.Linq;
7
+using System.Threading.Tasks;
8
+
9
+namespace Utility.Mail
10
+{
11
+
12
+    /// <summary>
13
+    /// send email
14
+    /// </summary>
15
+    public class MailUtil
16
+    {
17
+        private async static Task<bool> SendMail(MimeMessage mailMessage, MailConfig config)
18
+        {
19
+            try
20
+            {
21
+                var smtpClient = new SmtpClient();
22
+                smtpClient.Timeout = 10 * 1000;   //设置超时时间
23
+                smtpClient.Connect(config.Host, config.Port, MailKit.Security.SecureSocketOptions.None);//连接到远程smtp服务器
24
+                smtpClient.Authenticate(config.Address, config.Password);
25
+                await smtpClient.SendAsync(mailMessage);//发送邮件
26
+                smtpClient.Disconnect(true);
27
+                return true;
28
+
29
+            }
30
+            catch
31
+            {
32
+                throw;
33
+            }
34
+
35
+        }
36
+
37
+        /// <summary>
38
+        ///发送邮件
39
+        /// </summary>
40
+        /// <param name="config">配置</param>
41
+        /// <param name="receives">接收人</param>
42
+        /// <param name="sender">发送人</param>
43
+        /// <param name="subject">标题</param>
44
+        /// <param name="body">内容</param>
45
+        /// <param name="attachments">附件</param>
46
+        /// <param name="fileName">附件名</param>
47
+        /// <returns></returns>
48
+        public async static Task<bool> SendMail(MailConfig config, List<string> receives, string subject, string body, List<Stream> attachmentsList = null, List<string> fileNameList = null)
49
+        {
50
+            var fromMailAddress = new MailboxAddress(config.Name, config.Address);
51
+
52
+            var mailMessage = new MimeMessage();
53
+            mailMessage.From.Add(fromMailAddress);
54
+
55
+            foreach (var add in receives)
56
+            {
57
+                var toMailAddress = new MailboxAddress(add);
58
+                mailMessage.To.Add(toMailAddress);
59
+            }
60
+            var bodyBuilder = new BodyBuilder() { HtmlBody = body };
61
+
62
+            //附件
63
+            if (attachmentsList != null && attachmentsList.Count > 0)
64
+            {
65
+
66
+                for (int i = 0; i < attachmentsList.Count; i++)
67
+                {
68
+                    var fileName = fileNameList != null && fileNameList.Count > 0 ? fileNameList[i] : "";
69
+                    if (string.IsNullOrEmpty(fileName))
70
+                    {
71
+                        fileName = "未命名文件.txt";
72
+                    }
73
+                    var attachment = new MimePart(new ContentType("image", "png"))
74
+                    {
75
+                        Content = new MimeContent(attachmentsList[i]),
76
+                        ContentDisposition = new ContentDisposition(ContentDisposition.Attachment),
77
+                        ContentTransferEncoding = ContentEncoding.Base64,
78
+                    };
79
+                    attachment.ContentType.Parameters.Add("GB18030", "name", fileName);
80
+                    attachment.ContentDisposition.Parameters.Add("GB18030", "filename", fileName);
81
+
82
+                    bodyBuilder.Attachments.Add(attachment);
83
+
84
+                }
85
+            }
86
+
87
+            mailMessage.Body = bodyBuilder.ToMessageBody();
88
+            mailMessage.Subject = subject;
89
+
90
+            return await SendMail(mailMessage, config);
91
+
92
+        }
93
+    }
94
+}

+ 11 - 0
DemoMailKit/Utility/Utility.csproj

@@ -0,0 +1,11 @@
1
+<Project Sdk="Microsoft.NET.Sdk">
2
+
3
+  <PropertyGroup>
4
+    <TargetFramework>netcoreapp2.0</TargetFramework>
5
+  </PropertyGroup>
6
+
7
+  <ItemGroup>
8
+    <PackageReference Include="MailKit" Version="2.0.1" />
9
+  </ItemGroup>
10
+
11
+</Project>