1. 概念

1.1. 常见的类型

  • Mail User Agent

    • 收发邮件用的,类似浏览器的作用。例如:mail,mailx,ssmtp,msmtp
  • Mail Transport Agent
    • 邮件服务器,类似apache, nginx的作用。例如:sendmail,postfix

1.2. 相关协议

  • SMTP: Simple Mail Transfer Protocol,即简单邮件传输协议,用来发送电子邮件;
  • POP3: Post Office Protocol-Version3,它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件。
  • IMAP: Internet Mail Access Protocol,不同于POP3,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上。

1.3. SMTP协议

SMTP认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。

增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。

Looks like sSMTP is no longer maintained, MSMTP is the suggested replacement.

如果服务器选择"localhost",那么你需要在本机跑一个MTA(例如sendmail)。否则也无法成功发送邮件。但如果仅仅为了发送一封邮件而开启本地服务,是不是太不值得了呢?!

所以建议还是通过smtp连接外部服务器吧,比如126邮箱……

2. python::smtplib

import smtplib
from email.message import EmailMessage class Mail:
map_host2server = {
"163.com" : "smtp.163.com",
"126.com" : "smtp.126.com",
# "qq.com" : "smtp.qq.com",
} def __init__(self, user, passwd):
self.uid = user mail_host = self.uid.split("@")[1]
try:
mail_server = self.map_host2server[mail_host]
except KeyError:
raise MailServerNotSupported() # smtp_server = smtplib.SMTP_SSL(mail_server, 465)
self.smtp = smtplib.SMTP(mail_server) # 使用非SSL协议端口号25
self.smtp.login(self.uid, passwd) def send(self, target, content, title=None):
msg = EmailMessage()
msg.set_content(content) if not title:
title = content[:20]
lines = title.split("\n")
if len(lines) > 1:
title = lines[0]
else:
title = title[:17] + "..." msg['Subject'] = title
msg['From'] = self.uid
msg['To'] = target # Send the message via our own SMTP server.
try:
self.smtp.send_message(msg)
except smtplib.SMTPDataError as e:
print("发送失败,可能遭到了接收服务器拒绝...具体信息如下:")
print(e)
else:
print("邮件已发送!")

mail邮件操作的更多相关文章

  1. Linux mail 邮件发送

    Linux mail 邮件介绍 在Linux系统下我们可以通过”mail“命令,发送邮件,在运维中通常我们它来实现邮件告警. 安装 (方案1) 一.安装邮件服务 yum install -y send ...

  2. 使用SpringBoot发送mail邮件

    1.前言 发送邮件应该是网站的必备拓展功能之一,注册验证,忘记密码或者是给用户发送营销信息.正常我们会用JavaMail相关api来写发送邮件的相关代码,但现在springboot提供了一套更简易使用 ...

  3. Java Mail 邮件发送简单封装

    上一篇文章我们用写了一个Java Mail 的Demo,相信你已经可以用那个例子来发送邮件了.但是Demo 有很多的问题. 首先每次发送需要配置的东西很多,包括发件人的邮箱和密码.smtp服务器和SM ...

  4. java mail邮件发送(带附件) 支持SSL

    java mail邮件发送(带附件)有三个类 MailSenderInfo.java package mail; import java.util.Properties; import java.ut ...

  5. centos7下mail邮件的查看删除、禁止部分应用发邮件

    查看与删除 mail命令进入 & p                  #显示当前邮件& 2                  #显示标号为2的文件 & d 1-100     ...

  6. LumiSoft 邮件操作删除(无法删除解决方法)

    最近在用 LumiSoft  进行邮件读取,然后操作相关附件邮件使用的是qq邮箱,读取后进行移除,但是怎么都移除不了 后来咨询了官方客服,原来是设置不对 需要 取消掉 X禁止收信软件删信 (仅对 PO ...

  7. Python邮箱客户端编写之接收邮件操作

    Python的POP3类有很多方法来管理邮箱. 首先需要导入poplib库,import poplib POP3(server) 连接到邮箱服务器 user(username)将用户名发送至服务器,等 ...

  8. linux mail 简操作

    1. 如何查看linux的mailqueue 检查所传送的电子邮件是否送出,或滞留在邮件服务器中 语法:/usr/lib/sendmail -bp 2. 如何发送mail 1)将文件当做电子邮件的内容 ...

  9. Spring mail 邮件发送的简单实现

    package cn.taskSys.utils; import java.util.Properties; import org.springframework.mail.MailException ...

随机推荐

  1. mysql小白系列_03 体系结构-线程池

    thread pool的原理是什么? 为什么用double write就能解决page坏的问题? Innodb redo log 与 binlog有什么区别?有了Innodb redo log为什么还 ...

  2. sklearn学习:为什么roc_auc_score()和auc()有不同的结果?

    为什么roc_auc_score()和auc()有不同的结果? auc():计算ROC曲线下的面积.即图中的area roc_auc_score():计算AUC的值,即输出的AUC 最佳答案 AUC并 ...

  3. python 日期、时间

    1.字符类型的时间 转为 时间数组 t1 = '2013-10-10 23:40:00'timeArray = time.strptime(t1, "%Y-%m-%d %H:%M:%S&qu ...

  4. JAVA 基础知识。程序运方法。

    dos     常用命令    dir     查看此文件夹目录下的所有程序    cd..    返回上一层目录    盘符:  直接切换至相应的盘符    cd 目录 切换至指定的目录    cd ...

  5. mantisbt2.22.1 中使用自带的phpmailer发送邮件(实测可用)

    mantis最新版本安装无难度,直接集成LAMP环境,解压放到web目录下运行,按界面显示一步步操作. 1.前提默认已安装好mantis,自带phpmailer的路径为:mantisbt2/vendo ...

  6. 基于 kubeadm 搭建高可用的kubernetes 1.18.2 (k8s)集群 部署 dashboard 2.x

    1. 部署dashboard 2.x版本 Dashboard 分为 1.x版本 和 2.x版本, k8s 使用的是1.18.2 故部署2.x版本的 # dashboard 2.x版本的部署 # 上传d ...

  7. [转]前人挖坑,后人填坑—如何把那些bug挖掘出来

    当我们放下一个项目转投下一个时,手头的东西就要转交给他人处理,或者..不再有人处理,可代码还在那里,搞不好你就引用了别人的东西,保不准哪天别人的代码里就爆出了个大 bug,当然这里的“别人”也可能是 ...

  8. 设计MyTime类 代码参考

    #include <iostream> #include <cstdio> using namespace std; class MyTime { private: int h ...

  9. [apue] 一个工业级、跨平台的 tcp 网络服务框架:gevent

    作为公司的公共产品,经常有这样的需求:就是新建一个本地服务,产品线作为客户端通过 tcp 接入本地服务,来获取想要的业务能力. 与印象中动辄处理成千上万连接的 tcp 网络服务不同,这个本地服务是跑在 ...

  10. leetcode56之合并区间

    题目描述: 给出一个区间的集合,请合并所有重叠的区间. 示例: 输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1, ...