HmailServer提供的是C#接口,没有办法直接用Python操作。但是我的后台是用Python写的,所以解决办法是:实际用C#来操作HmailServer,然后生成.dll文件工python调用。
C#操作HmailServer的方法(实现邮箱注册、发邮件)
C#项目生成.dll文件的方法
python调用.dll创建用户、发邮件
接下来是通过python来调用C#的.dll文件中的对象、方法来实现创建用户和发邮件的功能。收邮件功能直接用python实现。
在pycharm中先引入几个模块:
comtypes,pythonnet,imbox
C#项目大致内容:
namespace MyDll
{
public class Email
{
// hmailserver
string USERNAME = "Administrator";
string PASSWORD = "password";
string DOMAIN = "nico.com";
string IP = "192.168.0.107";
int PORT = 587;
public string addUser(string email, string password)
{
Application mailserver = new hMailServer.Application();
//admin登录验证
mailserver.Authenticate(USERNAME, PASSWORD);
// 获取*.com 域
var domain = mailserver.Domains.ItemByName[DOMAIN];
var obAccounts = domain.Accounts;
var obNewAccount = obAccounts.Add();
obNewAccount.Address = email;
obNewAccount.Password = password;
obNewAccount.Active = true;
obNewAccount.MaxSize = 500; //500mb
obNewAccount.Save();
return "success";
}
// 邮件信息
public class MailInfo
{
public string From;
public string to;
public string subject;
public string body;
}
public string sendmail(string eml, string psw, MailInfo mailInfo)
{
MailMessage mailObject = new MailMessage();
//设置发件人
mailObject.From = new MailAddress(mailInfo.From); //发件人地址
//设置收件人
mailObject.To.Add(new MailAddress(mailInfo.to));
//为了防止乱码,设置主题编码格式
mailObject.SubjectEncoding = Encoding.UTF8;
mailObject.Subject = mailInfo.subject;
//设置正文编码格式
mailObject.BodyEncoding = Encoding.UTF8;
mailObject.Body = mailInfo.body;
//2.创建一个发送邮件的对象
SmtpClient smtpClient = new SmtpClient();
smtpClient.Host = IP; //设置服务器ip地址
smtpClient.Port = PORT; //端口号
smtpClient.Credentials = new NetworkCredential(eml, psw);
//发送
smtpClient.Send(mailObject);
return "success";
}
}
}
创建用户
python:
import clr
clr.AddReference('../MyDll/MyDll/bin/Debug/MyDll') # dll文件的相对路径 用以加载dll文件
from MyDll import * # 引入命名空间
在pycharm中这个位置会一直标红,不用理会,项目是可以运行的。
接下来就可以在python中直接使用C#的对象了。
先实现创建用户
obj = Email() # 创建一个对象
email = 'test@nico.com' # 想要创建的账号和密码
password = 'test'
print(obj.addUser(email, password))
运行。成功创建用户,将在控制台打印出 “success” 字段。
在HmailServer中查看,用户已被创建
发邮件
# 邮件信息
mailinfo = obj.MailInfo()
mailinfo.From = "test@nico.com" # 发件人
mailinfo.to = "test1@nico.com" #收件人
mailinfo.subject = "hi" # 邮件主题
mailinfo.body = "i am body" # 邮件内容
print(obj.sendmail(email, password, mailinfo))
运行。成功发送邮件,将在控制台打印出 “success” 字段。
python收取邮件
把刚刚发送到test1的那封邮件读取出来
from imbox import Imbox # 引入imbox模块
with Imbox('192.168.0.107', # hmailserver服务器ip地址
username='test1@nico.com', # 收件人登录
password='test1',
ssl=False,
ssl_context=None,
starttls=False) as imbox:
all_mails = imbox.messages()
# 读取收件箱所有信息
for uid, messages in all_mails:
print(messages.subject)
# 输出邮件主题
print(messages.body['plain'])
# 输出邮件内容以文本格式
print(uid)
运行结果