MailKit和MimeKit 收发邮件
新建项目,引用MailKit和MimeKit NuGet包
using CommonTool.MailKit;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ProjectDemo.ConsoleApp
{
class Program
{
static void Main(string[] args)
{
try
{
var ccList = new List<string>();
ccList.Add("*****@qq.com");
var recipients = new List<string>();
recipients.Add("*****@qq.com");
var mailBodyEntity = new MailBodyEntity()
{
Body = "这是一个测试邮件body内容<a href='http://www.baidu.com'>123</a>",
Cc = ccList,
//MailBodyType = "html",
MailFiles = new List<MailFile>() {
new MailFile { MailFilePath = @"D:\文档\File\20180807165402.png", MailFileSubType = "png", MailFileType = "image" },
new MailFile { MailFilePath = @"D:\文档\File\TIM截图20180807165402.png", MailFileSubType = "png", MailFileType = "image" }
},
Recipients = recipients,
Sender = "邮件的发件人",
SenderAddress = "111111@qq.com",
Subject = "测试邮件是否可以发送的标题",
};
var sendServerConfiguration = new SendServerConfigurationEntity()
{
SenderPassword = "123456",
SmtpPort = 465,
IsSsl = true,
MailEncoding = "utf-8",
SenderAccount = "11111@qq.com",
SmtpHost = "smtp.qq.com", }; var result=SeedMailHelper.SendMail(mailBodyEntity, sendServerConfiguration);
ReceiveEmailHelper.ReceiveEmail();
ReceiveEmailHelper.DownloadBodyParts();
Console.WriteLine("成功!");
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
}
}
发送邮件
using MailKit;
using MailKit.Net.Smtp;
using MailKit.Security;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace CommonTool.MailKit
{
/// <summary>
/// 发送邮件
/// </summary>
public static class SeedMailHelper
{
/// <summary>
/// 发送邮件
/// </summary>
/// <param name="mailBodyEntity">邮件基础信息</param>
/// <param name="sendServerConfiguration">发件人基础信息</param>
public static SendResultEntity SendMail(MailBodyEntity mailBodyEntity,
SendServerConfigurationEntity sendServerConfiguration)
{
if (mailBodyEntity == null)
{
throw new ArgumentNullException();
} if (sendServerConfiguration == null)
{
throw new ArgumentNullException();
} var sendResultEntity = new SendResultEntity(); using (var client = new SmtpClient(new ProtocolLogger(MailMessage.CreateMailLog())))
{
client.ServerCertificateValidationCallback = (s, c, h, e) => true; Connection(mailBodyEntity, sendServerConfiguration, client, sendResultEntity); if (sendResultEntity.ResultStatus == false)
{
return sendResultEntity;
} SmtpClientBaseMessage(client); // Note: since we don't have an OAuth2 token, disable
// the XOAUTH2 authentication mechanism.
client.AuthenticationMechanisms.Remove("XOAUTH2"); Authenticate(mailBodyEntity, sendServerConfiguration, client, sendResultEntity); if (sendResultEntity.ResultStatus == false)
{
return sendResultEntity;
} Send(mailBodyEntity, sendServerConfiguration, client, sendResultEntity); if (sendResultEntity.ResultStatus == false)
{
return sendResultEntity;
}
client.Disconnect(true);
}
return sendResultEntity;
} /// <summary>
/// 连接服务器
/// </summary>
/// <param name="mailBodyEntity">邮件内容</param>
/// <param name="sendServerConfiguration">发送配置</param>
/// <param name="client">客户端对象</param>
/// <param name="sendResultEntity">发送结果</param>
public static void Connection(MailBodyEntity mailBodyEntity, SendServerConfigurationEntity sendServerConfiguration,
SmtpClient client, SendResultEntity sendResultEntity)
{
try
{
client.Connect(sendServerConfiguration.SmtpHost, sendServerConfiguration.SmtpPort);
}
catch (SmtpCommandException ex)
{
sendResultEntity.ResultInformation = $"尝试连接时出错:{0}" + ex.Message;
sendResultEntity.ResultStatus = false;
}
catch (SmtpProtocolException ex)
{
sendResultEntity.ResultInformation = $"尝试连接时的协议错误:{0}" + ex.Message;
sendResultEntity.ResultStatus = false;
}
catch (Exception ex)
{
sendResultEntity.ResultInformation = $"服务器连接错误:{0}" + ex.Message;
sendResultEntity.ResultStatus = false;
}
} /// <summary>
/// 账户认证
/// </summary>
/// <param name="mailBodyEntity">邮件内容</param>
/// <param name="sendServerConfiguration">发送配置</param>
/// <param name="client">客户端对象</param>
/// <param name="sendResultEntity">发送结果</param>
public static void Authenticate(MailBodyEntity mailBodyEntity, SendServerConfigurationEntity sendServerConfiguration,
SmtpClient client, SendResultEntity sendResultEntity)
{
try
{
client.Authenticate(sendServerConfiguration.SenderAccount, sendServerConfiguration.SenderPassword);
}
catch (AuthenticationException ex)
{
sendResultEntity.ResultInformation = $"无效的用户名或密码:{0}" + ex.Message;
sendResultEntity.ResultStatus = false;
}
catch (SmtpCommandException ex)
{
sendResultEntity.ResultInformation = $"尝试验证错误:{0}" + ex.Message;
sendResultEntity.ResultStatus = false;
}
catch (SmtpProtocolException ex)
{
sendResultEntity.ResultInformation = $"尝试验证时的协议错误:{0}" + ex.Message;
sendResultEntity.ResultStatus = false;
}
catch (Exception ex)
{
sendResultEntity.ResultInformation = $"账户认证错误:{0}" + ex.Message;
sendResultEntity.ResultStatus = false;
}
} /// <summary>
/// 发送邮件
/// </summary>
/// <param name="mailBodyEntity">邮件内容</param>
/// <param name="sendServerConfiguration">发送配置</param>
/// <param name="client">客户端对象</param>
/// <param name="sendResultEntity">发送结果</param>
public static void Send(MailBodyEntity mailBodyEntity, SendServerConfigurationEntity sendServerConfiguration,
SmtpClient client, SendResultEntity sendResultEntity)
{
try
{
client.Send(MailMessage.AssemblyMailMessage(mailBodyEntity));
}
catch (SmtpCommandException ex)
{
switch (ex.ErrorCode)
{
case SmtpErrorCode.RecipientNotAccepted:
sendResultEntity.ResultInformation = $"收件人未被接受:{ex.Message}";
break;
case SmtpErrorCode.SenderNotAccepted:
sendResultEntity.ResultInformation = $"发件人未被接受:{ex.Message}";
break;
case SmtpErrorCode.MessageNotAccepted:
sendResultEntity.ResultInformation = $"消息未被接受:{ex.Message}";
break;
}
sendResultEntity.ResultStatus = false;
}
catch (SmtpProtocolException ex)
{
sendResultEntity.ResultInformation = $"发送消息时的协议错误:{ex.Message}";
sendResultEntity.ResultStatus = false;
}
catch (Exception ex)
{
sendResultEntity.ResultInformation = $"邮件接收失败:{ex.Message}";
sendResultEntity.ResultStatus = false;
}
} /// <summary>
/// 获取SMTP基础信息
/// </summary>
/// <param name="client">客户端对象</param>
/// <returns></returns>
public static MailServerInformation SmtpClientBaseMessage(SmtpClient client)
{
var mailServerInformation = new MailServerInformation
{
Authentication = client.Capabilities.HasFlag(SmtpCapabilities.Authentication),
BinaryMime = client.Capabilities.HasFlag(SmtpCapabilities.BinaryMime),
Dsn = client.Capabilities.HasFlag(SmtpCapabilities.Dsn),
EightBitMime = client.Capabilities.HasFlag(SmtpCapabilities.EightBitMime),
Size = client.MaxSize
}; return mailServerInformation;
}
}
}
基础类
using MimeKit;
using MimeKit.Text;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace CommonTool.MailKit
{
/// <summary>
/// 邮件信息
/// </summary>
public static class MailMessage
{
/// <summary>
/// 组装邮件文本/附件邮件信息
/// </summary>
/// <param name="mailBodyEntity">邮件消息实体</param>
/// <returns></returns>
public static MimeMessage AssemblyMailMessage(MailBodyEntity mailBodyEntity)
{
if (mailBodyEntity == null)
{
throw new ArgumentNullException(nameof(mailBodyEntity));
}
var message = new MimeMessage(); //设置邮件基本信息
SetMailBaseMessage(message, mailBodyEntity); var multipart = new Multipart("mixed"); //插入文本消息
if (!string.IsNullOrEmpty(mailBodyEntity.Body))
{
var alternative = new MultipartAlternative
{
AssemblyMailTextMessage(mailBodyEntity.Body, mailBodyEntity.MailBodyType)
};
multipart.Add(alternative);
} //插入附件
foreach (var mailFile in mailBodyEntity.MailFiles)
{
if (mailFile.MailFilePath != null && File.Exists(mailFile.MailFilePath))
{
var mimePart = AssemblyMailAttachmentMessage(mailFile.MailFileType, mailFile.MailFileSubType,
mailFile.MailFilePath);
multipart.Add(mimePart);
}
} //组合邮件内容
message.Body = multipart;
return message;
} /// <summary>
/// 设置邮件基础信息
/// </summary>
/// <param name="minMessag"></param>
/// <param name="mailBodyEntity"></param>
/// <returns></returns>
public static MimeMessage SetMailBaseMessage(MimeMessage minMessag, MailBodyEntity mailBodyEntity)
{
if (minMessag == null)
{
throw new ArgumentNullException();
}
if (mailBodyEntity == null)
{
throw new ArgumentNullException();
} //插入发件人
minMessag.From.Add(new MailboxAddress(mailBodyEntity.Sender, mailBodyEntity.SenderAddress)); //插入收件人
if(mailBodyEntity.Recipients.Any())
{
foreach (var recipients in mailBodyEntity.Recipients)
{
minMessag.To.Add(new MailboxAddress(recipients));
}
} //插入抄送人
if (mailBodyEntity.Cc!=null&&mailBodyEntity.Cc.Any())
{
foreach (var cC in mailBodyEntity.Cc)
{
minMessag.Cc.Add(new MailboxAddress(cC));
}
} //插入密送人
if (mailBodyEntity.Bcc != null && mailBodyEntity.Bcc.Any())
{
foreach (var bcc in mailBodyEntity.Bcc)
{
minMessag.Bcc.Add(new MailboxAddress(bcc));
}
} //插入主题
minMessag.Subject = mailBodyEntity.Subject;
return minMessag;
} /// <summary>
/// 组装邮件文本信息
/// </summary>
/// <param name="mailBody">邮件内容</param>
/// <param name="textPartType">邮件类型(plain,html,rtf,xml)</param>
/// <returns></returns>
public static TextPart AssemblyMailTextMessage(string mailBody, TextFormat textPartType)
{
if (string.IsNullOrEmpty(mailBody))
{
throw new ArgumentNullException();
}
//var textBody = new TextPart(textPartType)
//{
// Text = mailBody,
//}; //处理查看源文件有乱码问题
var textBody = new TextPart(textPartType);
textBody.SetText(Encoding.Default, mailBody);
return textBody;
} /// <summary>
/// 组装邮件附件信息
/// </summary>
/// <param name="fileAttachmentType">附件类型(image,application)</param>
/// <param name="fileAttachmentSubType">附件子类型 </param>
/// <param name="fileAttachmentPath">附件路径</param>
/// <returns></returns>
public static MimePart AssemblyMailAttachmentMessage(string fileAttachmentType, string fileAttachmentSubType, string fileAttachmentPath)
{
if (string.IsNullOrEmpty(fileAttachmentSubType))
{
throw new ArgumentNullException();
}
if (string.IsNullOrEmpty(fileAttachmentType))
{
throw new ArgumentNullException();
}
if (string.IsNullOrEmpty(fileAttachmentPath))
{
throw new ArgumentNullException();
}
var fileName = Path.GetFileName(fileAttachmentPath);
var attachment = new MimePart(fileAttachmentType, fileAttachmentSubType)
{
Content = new MimeContent(File.OpenRead(fileAttachmentPath)),
ContentDisposition = new ContentDisposition(ContentDisposition.Attachment),
ContentTransferEncoding = ContentEncoding.Base64,
//FileName = fileName,
}; //qq邮箱附件文件名中文乱码问题
//var charset = "GB18030";
attachment.ContentType.Parameters.Add(Encoding.Default, "name", fileName);
attachment.ContentDisposition.Parameters.Add(Encoding.Default, "filename", fileName); //处理文件名过长
foreach (var param in attachment.ContentDisposition.Parameters)
param.EncodingMethod = ParameterEncodingMethod.Rfc2047;
foreach (var param in attachment.ContentType.Parameters)
param.EncodingMethod = ParameterEncodingMethod.Rfc2047; return attachment;
} /// <summary>
/// 创建邮件日志文件
/// </summary>
/// <returns></returns>
public static string CreateMailLog()
{
var logPath = AppDomain.CurrentDomain.BaseDirectory + "/DocumentLog/" +
Guid.NewGuid() + ".txt"; if (File.Exists(logPath)) return logPath;
var fs = File.Create(logPath);
fs.Close();
return logPath; }
}
}
实体
using MimeKit.Text;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace CommonTool.MailKit
{
/// <summary>
/// 邮件内容实体
/// </summary>
public class MailBodyEntity
{
///// <summary>
///// 邮件文本内容
///// </summary>
//public string MailTextBody { get; set; } /// <summary>
/// 邮件内容类型
/// </summary>
public TextFormat MailBodyType { get; set; } = TextFormat.Html; /// <summary>
/// 邮件附件集合
/// </summary>
public List<MailFile> MailFiles { get; set; } /// <summary>
/// 收件人
/// </summary>
public List<string> Recipients { get; set; } /// <summary>
/// 抄送
/// </summary>
public List<string> Cc { get; set; } /// <summary>
/// 密送
/// </summary>
public List<string> Bcc { get; set; } /// <summary>
/// 发件人
/// </summary>
public string Sender { get; set; } /// <summary>
/// 发件人地址
/// </summary>
public string SenderAddress { get; set; } /// <summary>
/// 邮件主题
/// </summary>
public string Subject { get; set; } /// <summary>
/// 邮件内容
/// </summary>
public string Body { get; set; }
} public class MailFile
{
/// <summary>
/// 邮件附件文件类型 例如:图片 MailFileType="image"
/// </summary>
public string MailFileType { get; set; } /// <summary>
/// 邮件附件文件子类型 例如:图片 MailFileSubType="png"
/// </summary>
public string MailFileSubType { get; set; } /// <summary>
/// 邮件附件文件路径 例如:图片 MailFilePath=@"C:\Files\123.png"
/// </summary>
public string MailFilePath { get; set; }
} /// <summary>
/// 邮件服务器基础信息
/// </summary>
public class MailServerInformation
{
/// <summary>
/// SMTP服务器支持SASL机制类型
/// </summary>
public bool Authentication { get; set; } /// <summary>
/// SMTP服务器对消息的大小
/// </summary>
public uint Size { get; set; } /// <summary>
/// SMTP服务器支持传递状态通知
/// </summary>
public bool Dsn { get; set; } /// <summary>
/// SMTP服务器支持Content-Transfer-Encoding
/// </summary>
public bool EightBitMime { get; set; } /// <summary>
/// SMTP服务器支持Content-Transfer-Encoding
/// </summary>
public bool BinaryMime { get; set; } /// <summary>
/// SMTP服务器在消息头中支持UTF-8
/// </summary>
public string UTF8 { get; set; }
} /// <summary>
/// 邮件发送结果
/// </summary>
public class SendResultEntity
{
/// <summary>
/// 结果信息
/// </summary>
public string ResultInformation { get; set; } = "发送成功!"; /// <summary>
/// 结果状态
/// </summary>
public bool ResultStatus { get; set; } = true;
} /// <summary>
/// 邮件发送服务器配置
/// </summary>
public class SendServerConfigurationEntity
{
/// <summary>
/// 邮箱SMTP服务器地址
/// </summary>
public string SmtpHost { get; set; } /// <summary>
/// 邮箱SMTP服务器端口
/// </summary>
public int SmtpPort { get; set; } /// <summary>
/// 是否启用IsSsl
/// </summary>
public bool IsSsl { get; set; } /// <summary>
/// 邮件编码
/// </summary>
public string MailEncoding { get; set; } /// <summary>
/// 邮箱账号
/// </summary>
public string SenderAccount { get; set; } /// <summary>
/// 邮箱密码
/// </summary>
public string SenderPassword { get; set; } }
}
接收
using MailKit;
using MailKit.Net.Imap;
using MailKit.Search;
using MailKit.Security;
using MimeKit;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace CommonTool.MailKit
{
/// <summary>
/// 跟投邮件服务API
/// </summary>
public static class ReceiveEmailHelper
{
/// <summary>
/// 设置发件人信息
/// </summary>
/// <returns></returns>
public static SendServerConfigurationEntity SetSendMessage()
{
var sendServerConfiguration = new SendServerConfigurationEntity
{
SmtpHost = ConfigurationManager.AppSettings["SmtpServer"],
SmtpPort = int.Parse(ConfigurationManager.AppSettings["SmtpPort"]),
IsSsl = Convert.ToBoolean(ConfigurationManager.AppSettings["IsSsl"]),
MailEncoding = ConfigurationManager.AppSettings["MailEncoding"],
SenderAccount = ConfigurationManager.AppSettings["SenderAccount"],
SenderPassword = ConfigurationManager.AppSettings["SenderPassword"]
};
return sendServerConfiguration;
} /// <summary>
/// 接收邮件
/// </summary>
public static void ReceiveEmail()
{
var sendServerConfiguration = SetSendMessage(); if (sendServerConfiguration == null)
{
throw new ArgumentNullException();
} using (var client = new ImapClient(new ProtocolLogger(MailMessage.CreateMailLog())))
{
client.Connect(sendServerConfiguration.SmtpHost, sendServerConfiguration.SmtpPort,
SecureSocketOptions.SslOnConnect);
client.Authenticate(sendServerConfiguration.SenderAccount, sendServerConfiguration.SenderPassword);
client.Inbox.Open(FolderAccess.ReadOnly);
var uids = client.Inbox.Search(SearchQuery.All);
foreach (var uid in uids)
{
var message = client.Inbox.GetMessage(uid);
message.WriteTo($"{uid}.eml");
} client.Disconnect(true);
}
} /// <summary>
/// 下载邮件内容
/// </summary>
public static void DownloadBodyParts()
{
var sendServerConfiguration = SetSendMessage(); using (var client = new ImapClient())
{
client.Connect(sendServerConfiguration.SmtpHost, sendServerConfiguration.SmtpPort,
SecureSocketOptions.SslOnConnect);
client.Authenticate(sendServerConfiguration.SenderAccount, sendServerConfiguration.SenderPassword);
client.Inbox.Open(FolderAccess.ReadOnly); // 搜索Subject标题包含“MimeKit”或“MailKit”的邮件
var query = SearchQuery.SubjectContains("MimeKit").Or(SearchQuery.SubjectContains("MailKit"));
var uids = client.Inbox.Search(query); // 获取搜索结果的摘要信息(我们需要UID和BODYSTRUCTURE每条消息,以便我们可以提取文本正文和附件)
var items = client.Inbox.Fetch(uids, MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure); foreach (var item in items)
{
// 确定一个目录来保存内容
var directory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "/MailBody", item.UniqueId.ToString()); Directory.CreateDirectory(directory); // IMessageSummary.TextBody是一个便利的属性,可以为我们找到“文本/纯文本”的正文部分
var bodyPart = item.TextBody; // 下载'text / plain'正文部分
var body = (TextPart)client.Inbox.GetBodyPart(item.UniqueId, bodyPart); // TextPart.Text是一个便利的属性,它解码内容并将结果转换为我们的字符串
var text = body.Text; File.WriteAllText(Path.Combine(directory, "body.txt"), text); // 现在遍历所有附件并将其保存到磁盘
foreach (var attachment in item.Attachments)
{
// 像我们对内容所做的那样下载附件
var entity = client.Inbox.GetBodyPart(item.UniqueId, attachment); // 附件可以是message / rfc822部件或常规MIME部件
var messagePart = entity as MessagePart;
if (messagePart != null)
{
var rfc822 = messagePart; var path = Path.Combine(directory, attachment.PartSpecifier + ".eml"); rfc822.Message.WriteTo(path);
}
else
{
var part = (MimePart)entity; // 注意:这可能是空的,但大多数会指定一个文件名
var fileName = part.FileName; var path = Path.Combine(directory, fileName); // decode and save the content to a file
using (var stream = File.Create(path))
part.Content.DecodeTo(stream);
}
}
} client.Disconnect(true);
}
}
}
}
https://blog.csdn.net/sd7o95o/article/details/79493045
MailKit和MimeKit 收发邮件的更多相关文章
- mailkit库收发邮件
mailkit库用于收发邮件.这个库可以替代C#自带的发邮件库 环境 W10 / VS2017CMMT / MailKit version="2.0.3" "net46 ...
- 创建基于MailKit和MimeKit的.NET基础邮件服务
邮件服务是一般的系统都会拥有和需要的功能,但是对于.NET项目来说,邮件服务的创建和使用会较为的麻烦..NET对于邮件功能提供了System.Net.Mail用于创建邮件服务,该基础服务提供邮件的基础 ...
- MailKit和MimeKit的.NET基础邮件服务
MailKit和MimeKit的.NET基础邮件服务 邮件服务是一般的系统都会拥有和需要的功能,但是对于.NET项目来说,邮件服务的创建和使用会较为的麻烦..NET对于邮件功能提供了System.Ne ...
- NET 5 收发邮件之 MailKit
大家都用过SmtpClient来处理发送邮件的操作,不过这个类以及被标记已过时,所以介绍一个微软推荐的库MailKit来处理. MailKit开源地址:https://github.com/jsted ...
- 解决.NET Core中MailKit无法使用阿里云邮件推送服务的问题
在博问中(.net core怎么实现邮件发送)知道了MailKit无法使用阿里云邮件推送服务发送邮件的问题,自已实测也遇到同样的问题,而用自己搭建的邮件服务器没这个问题. 于是,向阿里云提交了工单.. ...
- DouNet学习_收发邮件
一.收发邮件 --->第一步:发邮件首先要有发送者的邮箱地址和登录的密码才能发送 这些都写在APP里 不要写死 --->第二步:发邮件就要有网络,要添加net.Mail命名空间 要发送的 ...
- Outlook Express 收发邮件出现"0x800CCC0F"错误代码解决方法
非常多网友在使用Outlook Express收发邮件的过程中,有时能够发送邮件,但出现不能接收信件的问题.每次在收邮件都会在某个地方停止不动,然后报超时,出现错误代码0x800CCC19或0x800 ...
- 用 Apache James 搭建邮件服务器来收发邮件实践(一)(转)
Apache James 简称 James, 是 Java Apache Mail Enterprise Server的缩写.James 是100%基于Java的电子邮件服务器.它是一种独立的邮件服务 ...
- 用Emacs收发邮件
使用Emacs,将尽可能多的工作放到Emacs中来完成,这样可以提高工作效率. 1.安装必要的LISP插件和程序 $sudo apt-get install stunnel4 $sudo apt-ge ...
随机推荐
- Flutter 多引擎支持 PlatformView 以及线程合并解决方案
作者:字节移动技术-李皓骅 摘要 本文介绍了 Flutter 多引擎下,使用 PlatformView 场景时不能绕开的一个线程合并问题,以及它最终的解决方案.最终 Pull Request 已经 m ...
- vscode配置golang开发环境
软件: go1.16.5.windows-amd64.msi vscode go安装后已经自动配置相关环境变量.在cmd中用go env查看环境变量. vscode设置goroot和gopath 找到 ...
- Java项目开发中实现分页的三种方式一篇包会
前言 Java项目开发中经常要用到分页功能,现在普遍使用SpringBoot进行快速开发,而数据层主要整合SpringDataJPA和MyBatis两种框架,这两种框架都提供了相应的分页工具,使用 ...
- super、this、抽象类、继承
super 代表是父类对象,并且在创建子类对象时,就先创建父类对象,再创建子类对象,可以在子类方法中使用super调用父类的非私有方法. this 代表本类对象,谁创建就代表谁 实体类,被创建的cla ...
- AESUtil_1
package com.tebon.ams.util;import org.apache.commons.codec.binary.Base64;import javax.crypto.Cipher; ...
- iOS9新特性之常见关键字
/* nullable:1.怎么使用(语法) 2.什么时候使用(作用) nullable作用:可能为空 nullable 语法1 @property (nonatomic, strong, nulla ...
- opencv结构IplImage
转载请注明来源:https://www.cnblogs.com/hookjc/ typedef struct _IplImage{int nSize; /* Ip ...
- 一个label 混搭不同颜色,不同字体的文字.. by 徐
效果如图箭头所示,只需要一个label就可以做到不同颜色或不同字体的效果 1 UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(10, ...
- Haproxy LVS Nginx的优缺点总结
Haproxy LVS Nginx的优缺点总结 1.haproxy优点 2.Nginx优点 3.Nginx缺点 4.LVS优点 5.LVS缺点 haproxy优点: haproxy也是支持虚拟主机 ...
- SQLServer、Mysql、Oracle 创建、删除用户和授予用户权限
SQLServer 1.创建用户 CREATE LOGIN [用户名称] WITH PASSWORD='用户密码', DEFAULT_DATABASE=[默认数据库名称], CHECK_EXPIRAT ...