java程序自动发送邮件,使用的SMTP协议,如何能将发件人改成中文昵称而不是注册的那些字母。部分程序如下

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java程序自动发送邮件,使用的SMTP协议,如何能将发件人改成中文昵称而不是注册的那些字母。部分程序如下相关的知识,希望对你有一定的参考价值。

String host = "smtp.163.com";
String port = "25";
String mailFrom = "*******@163.com";
String password = "****";

// outgoing message information
String mailTo =email;

MailTool mailer = new MailTool();
try
mailer.sendhtmlEmail(host, port, mailFrom, password, mailTo,
subject, "邮箱激活链接:<a href=\""+mailtype+"\" target=\"_blank\">"+mailtype+"</a>");
System.out.println("Email sent.");
catch (Exception ex)
System.out.println("Failed to sent email.");
ex.printStackTrace();
然后MailTool的部分代码
public static void main(String[] args)

// SMTP server information
String host = "smtp.163.com";
String port = "25";
String mailFrom = "***@163.com";
String password = "**";

// outgoing message information
String mailTo = "**@163.com";
String subject = "Hello my friend";

// message contains HTML markups
String message = "<i>Greetings!</i><br>";
message += "<b>Wish you a nice day!</b><br>";
message += "您的邮箱激活邮件请复制下面的激活链接到浏览器进行访问,以便激活你的邮箱。<br>邮箱激活链接:<br><a href=\"http://cthinker.com/do.jsp?ac=emailcheck&hash=c5abPDA8NysmegMVTisePllIWFZ3GVhyInkzOgQJckQbZT0zE3kvFT50JAFSSy1aOHw\" target=\"_blank\">http://cthinker.com/do.jsp?ac=emailcheck&hash=c5abPDA8NysmegMVTisePllIWFZ3GVhyInkzOgQJckQbZT0zE3kvFT50JAFSSy1aOHw</a>";
message += "<font color=red>Duke</font>";
message = "您的邮箱激活邮件请复制下面的激活链接到浏览器进行访问,以便激活你的邮箱。<br>邮箱激活链接:<br><a href=\\\"http://cthinker.com/do.jsp?ac=emailcheck&hash=c5abPDA8NysmegMVTisePllIWFZ3GVhyInkzOgQJckQbZT0zE3kvFT50JAFSSy1aOHw\\\" target=\\\"_blank\\\">http://cthinker.com/do.jsp?ac=emailcheck&hash=c5abPDA8NysmegMVTisePllIWFZ3GVhyInkzOgQJckQbZT0zE3kvFT50JAFSSy1aOHw</a>";

MailTool mailer = new MailTool();
System.out.println("---------ZZZZZZZZZZZZZZ-----------"+host+port+mailFrom+password+mailTo+subject+message);
try
mailer.sendHtmlEmail(host, port, mailFrom, password, mailTo,
subject, message);
System.out.println("Email sent.");
catch (Exception ex)
System.out.println("Failed to sent email.");
ex.printStackTrace();


希望收件人收到后显示发件人出不是**@163.com而是那个中文昵称 如何修改

参考技术A String mailTo = "**@163.com";

String mailTo = "张三<**@163.com>";追问

mailTo是收件人的 发件人的mailFrom也可以这样用么?

追答

可以的,修改来试试

用python自动发送邮件详细教程

最近工作中的一个项目需要自动发送一些信息邮件到指定邮箱的需求,那么如何实现Python自动发送邮件的功能呢?接下来我们就来简单的介绍下如何利用Python来实现自动发送邮件的功能。

Python SMTP发送邮件

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议 ,说白了就是发送邮件的协议,python的smplib库对SMTP协议进行了简单的封装,提供了对SMTP的支持,可以发送纯文本邮件、HTML文件以及带附件的邮件。

首先我们构建一个SendEmailManager类,也是遵循着面向对象编程的思想来做,大体结构如下:

class SendEmailManager(object):

    def __init__(self, **kwargs):
        # 初始化参数
        ...

    def _get_conf(self, key):
        # 获取配置参数
        ...

    def _init_conf(self):
        # 初始化配置参数
        ...

    def _login_email(self):
        # 登录邮箱服务器
        ...
    def _make_mail_msg(self):
        # 构建文本邮件对象
        ...

    def do_send_mail(self):
        # 邮件发送
        ...
  • def __init__(self, **kwargs)
    类的初始化函数,可以用来设置对象属性,并给予初始值,可以是参数或者固定值 ,其中参数**kwargs是将一个可变的关键字参数的字典传给函数实参,这里里我们主要是对SMTP服务器(这里使用qq邮箱)、发送邮件的代理邮箱、在邮箱中设置的客户端授权密码、可变参数进行一些初始化。具体代码如下:
    # SMTP服务器,这里使用qq邮箱,其他邮箱自行百度
    EMAIL_HOST = \'smtp.qq.com\'
    # 发送邮件的代理邮箱
    EMAIL_HOST_USER = \'xxxx@xxxx.com\'
    # 在邮箱中设置的客户端授权密码, 注意这里不是邮箱密码,如何获取邮箱授权码,请看本文最后教程
    EMAIL_HOST_PASSWORD = \'xxxxxxxxxxxxx\'
    def __init__(self, **kwargs):
        # 初始化参数
        self.email_host = EMAIL_HOST
        self.email_host_user = EMAIL_HOST_USER
        self.email_host_pass = EMAIL_HOST_PASSWORD
        self.kwargs = kwargs
  • def _get_conf(self, key)
    主要负责通过key读取 可变参数self.kwargs 字典里的值,供其他函数使用。
    def _get_conf(self, key):
        # 获取配置参数
        value = self.kwargs.get(key)
        if key != "attach_file_list" and (value is None or value == \'\'):
            raise Exception("configuration parameter \'%s\' cannot be empty" % key)
        return value
  • def _init_conf(self)
    该函数主要负责初始化 函数_get_conf 返回的配置参数, 以便接下来的函数可以调用相关配置参数。
    def _init_conf(self):
        # 初始化配置参数
        print(self._get_conf(\'receives\'))
        self.receives = self._get_conf(\'receives\')
        self.msg_subject = self._get_conf(\'msg_subject\')
        self.msg_content = self._get_conf(\'msg_content\')
        self.msg_from = self._get_conf(\'msg_from\')
        # attachment
        self.attach_file_list = self._get_conf(\'attach_file_list\')
  • def _login_email(self)
    登录邮件服务器, 我这里登陆的是qq邮箱的服务器,端口号为465,其他邮箱端口号请自行百度,代码如下:
    def _login_email(self):
        # 登录邮箱服务器
        try:
            server = smtplib.SMTP_SSL(self.email_host, port=465)
            # set_debuglevel(1)可以打印出和SMTP服务器交互的所有信息
            server.set_debuglevel(1)
            # 登录邮箱
            server.login(self.email_host_user, self.email_host_pass)
            return server
        except Exception as e:
            print("mail login exception:", e)
            raise e
  • def _make_mail_msg(self)
    该函数的功能为构建一个邮件实例对象,来处理邮件的内容。一封正常的邮件一般有收发件者信息,邮件主题,邮件正文,有些邮件还附带有附件,具体的设置参见如下代码:
    def _make_mail_msg(self):
        # 构建邮件对象
        msg = MIMEMultipart()
        msg.attach(MIMEText(self.msg_content, \'plain\', \'utf-8\'))
        # 邮件主题
        msg[\'Subject\'] = Header(self.msg_subject, "utf-8")
        # 发件人邮箱信息
        msg[\'From\'] = "<%s>" % self.msg_from
        # msg[\'From\'] = Header(self.msg_from + "<%s>" % self.email_host_user, "utf-8")
        msg[\'To\'] = ",".join(self.receives)
        print("---", self.attach_file_list)
        if self.attach_file_list:
            for i, att in enumerate(self.attach_file_list):
                # 构造附件,传送当前目录下的文件
                if not att:
                    break
                att_i = MIMEText(open(att, \'rb\').read(), \'base64\', \'utf-8\')
                att_i["Content-Type"] = \'application/octet-stream\'
                # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
                att_i["Content-Disposition"] = \'attachment; filename="%s"\' % att
                msg.attach(att_i)
        return msg
  • def do_send_mail(self)
    发送邮件,就是把上几个函数串起来,直接上代码:
    def do_send_mail(self):
        # 邮件发送
        try:
            self._init_conf()
            server = self._login_email()
            msg = self._make_mail_msg()
            server.sendmail(self.email_host_user, self.receives, msg.as_string())
            server.close()
            print("发送成功!")
        except Exception as e:
            print("邮件发送异常", e)
  • 配置参数,测试能否正常发送邮件:
    if __name__ == "__main__":
        mail_conf = {
            \'msg_from\': \'xxxx@qq.com\',  # 邮件发送者的地址
            \'receives\': [\'xxxx@qq.com\', \'xxxxxxxx@xxxx.com\', ],  # 邮件接收者的地址,这是个list,因为邮件的接收者可能不止一个
            \'msg_subject\': \'Python 自动发送邮件测试!!\',  # 邮件的主题
            \'msg_content\': \'人生苦短,我用python!!!\',  # 邮件的内容
            \'attach_file_list\': {"test_file1.py": "test.py", "test_file2.pem": "./public.pem"},  # 为附件文件路径列表,也是个list,也可没有这项
        }
    
        manager = SendEmailManager(**mail_conf)
        manager.do_send_mail()
    

 

 

ok,发送成功,添加附件也是没问题的。

开始我们讲的获取客户端邮箱的授权码,教程如下(以qq邮箱为例):

 

 

好了,目标完成。

以上是关于java程序自动发送邮件,使用的SMTP协议,如何能将发件人改成中文昵称而不是注册的那些字母。部分程序如下的主要内容,如果未能解决你的问题,请参考以下文章

发送邮件与 SMTP

用python自动发送邮件详细教程

用python自动发送邮件详细教程

SMTP协议解读以及如何使用SMTP协议发送电子邮件

java中使用javamail发送邮件

Java编程系列使用JavaMail通过SMTP协议发送局域网(内网)邮件