通过javamail,用免费阿里云邮箱账号发邮件

环境:Debian9, OpenJDK-8,tomcat-8.5,javamail-1.16.1

过程:

  1. apt update && apt upgrade && apt autoremove # 更新软件
  2. apt install openjdk-8-jdk # 安装 openjdk-8
    javamail-2.png
  3. apt install libservlet3.1-java # 安装 Java Servlet 和 JSP 库
  4. mkdir -p /var/lib/tomcat8/webapps/ROOT/WEB-INF/lib # 创建测试lib目录
  5. cd /var/lib/tomcat8/webapps/ROOT/WEB-INF/lib && wget https://github.com/javaee/javamail/releases/download/JAVAMAIL-1_6_1/javax.mail.jar # 下载javamail-1.6.1到lib目录中
  6. vi /var/lib/tomcat8/webapps/ROOT/javamail.jsp # 创建测试发邮件表单 javamail.jsp,内容如下,此例是通过连接smtp.aliyun.com 的 465端口,账户名是 anqunhe@aliyun.com

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
    <%
    //homepage:  http://cn.waterlin.org/
    request.setCharacterEncoding("utf-8");
    response.setCharacterEncoding("utf-8");
    response.setContentType("text/html; charset=utf-8");
    %>
    <%@ page import="javax.mail.*"%>
    <%@ page import="javax.mail.internet.*"%>
    <%@ page import="javax.activation.*"%>
    <%@ page import="java.util.*,java.io.*"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>JavaMail 电子邮件发送系统</title>
    </head>
    
    <body>
    
    <form action="" method="post" OnSubmit="">
    收件人Email:<br /> <input type="text" name="recipients"><br />
    发件人Mail:<br /> <input name="frommail" type="text" size="30" /><br />
    邮件标题 <br /> <input name="subject" type="text" size="50" /><br />
    内容:<br /> <textarea name="contents" cols="50" rows="10"></textarea> 
     <br /> <input type="submit" name="Submit" value="发送邮件" />
    <form>
    
    <%!
    //相应的服务器信息
    String host = "smtp.aliyun.com";
    String user = "anqunhe@aliyun.com";
    String password = "密码";
    String contentType="text/html; charset=utf-8";
    
    private class Authenticator extends javax.mail.Authenticator
    {
     public PasswordAuthentication getPasswordAuthentication()
     {
         String un = user;
         String pw = password;
         return new PasswordAuthentication(un, pw);
     }
    }
    %>
    <%
    String touser = request.getParameter("recipients")!=null ? request.getParameter("recipients") : "";
    
    
    String fromuser = request.getParameter("frommail")!=null ? request.getParameter("frommail") : "";
    
    
    String subject = request.getParameter("subject")!=null ? request.getParameter("subject") : "";
    
    
    String contents = request.getParameter("contents")!=null ? request.getParameter("contents") : "";
    
    
    
    
    try {
     Properties props = new Properties();
     props.put("mail.smtp.auth","true"); //是否验证
     props.put("mail.smtp.host", host);
     props.put("mail.smtp.user", user);
     props.put("mail.smtp.password",password);
     props.put("mail.smtp.ssl.enable","true");
     props.put("mail.smtp.ssl.enable", "true");
     props.put("mail.smtp.port","465");//Gmail 的端口号
     
     //根据邮件服务器是否需要 ttl 验证选用
     //props.put("mail.smtp.starttls.enable","true");
     
    
     boolean sessionDebug = false;
     Authenticator auth = new Authenticator();
     //Session mailSession = Session.getDefaultInstance(props, auth); //有时可能被拒绝
     Session mailSession = Session.getInstance(props,auth); //用户验证;
     //Session mailSession = Session.getInstance(props);
     //mailSession.setDebug(sessionDebug);
    
    
     Message msg = new MimeMessage(mailSession);
     msg.setFrom(new InternetAddress( fromuser ));
     msg.setRecipient(Message.RecipientType.TO, new InternetAddress( touser ));
     msg.setSubject( "邮件标题:" +subject);
     //((MimeMessage)msg).setSubject(subject, "GBK"); //设置中文标题
     msg.setSentDate(new Date());
    
     String text =  contents + "<hr>javamail.jsp 发送认证邮件<b>测试</b>。";
    
     msg.setContent(text, contentType);
    
     Transport transport = mailSession.getTransport("smtp");
     transport.connect(host,user,password);
    
     transport.send( msg );
    %>
    
    <p>你的邮件已发送,<a href="./javamail.jsp">请返回。</></p>
    
    <%
    }
    catch (Exception m) { 
         
    }
    %>
    
    </body>
    </html>

    javamail-7.png

  7. 填写好表单,测试发邮件。成功(在垃圾箱中)。
    javamail-8.png

参考:

果园大森林药店开业送鸡蛋

今日路过,看到果园路口路边有人聚集,“贺大森林盛大开业新鲜鸡蛋免费送”。

没近前去看,但这个大森林店应该营业很久了,为什么才“盛大开业”呢?但招牌是搞得比之前大,比之前好看了,估计重新装修门面。远看摆有标价的“小柴胡”和“夏桑菊”等。

da-sen-lin-1.jpg

在 Debian 9 里安装 php5.3 fpm

Debian 9 仓库里默认的php版本是7.0,如果网站程序一定需要php5.3,那可以尝试编译安装php5.3。

测试机是阿里云公共镜像Debian 9 64位。

过程:

  1. 先安装好 nginx + php7-fpm + MariaDB
  2. apt install libfcgi-dev libfcgi0ldbl libjpeg62-turbo-dev libmcrypt-dev libssl-dev libc-client2007e libc-client2007e-dev libxml2-dev libbz2-dev libcurl4-openssl-dev libjpeg-dev libpng-dev libkrb5-dev libxml2-dev libxslt1-dev libltdl-dev libmariadbclient-dev-compat # 安装好相应的开发包,编译安装时要用到
  3. 因为Debian9里的OpenSSL版本相对较高,所以需要先安装低版本的:

    cd /tmp
    wget "https://www.openssl.org/source/old/1.0.1/openssl-1.0.1t.tar.gz"
    tar xzf openssl-1.0.1t.tar.gz 
    cd openssl-1.0.1t
    ./config shared --prefix=/opt/openssl
    make -j $(nproc) && make install
    ln -s /opt/openssl/lib /opt/openssl/lib/x86_64-linux-gnu
    wget -O /opt/openssl/ssl/cert.pem "http://curl.haxx.se/ca/cacert.pem"
  4. 做一些符号链接,让php5.3在编译安装时能找到

    ln -s /opt/openssl/lib/libcrypto.so.1.0.0 /usr/lib/x86_64-linux-gnu/
    ln -s /opt/openssl/lib/libssl.so.1.0.0 /usr/lib/x86_64-linux-gnu/
    ln -fs /opt/openssl /usr/local/ssl
    ln -s /usr/lib/libc-client.a /usr/lib/x86_64-linux-gnu/libc-client.a
    cd /usr/include && ln -s x86_64-linux-gnu/curl
  5. 下载php5.3.29源码包,保存解压到 /usr/local/src/php5.3-build

    mkdir -p /opt/php-5.3
    mkdir /usr/local/src/php5.3-build
    cd /usr/local/src/php5.3-build
    wget -c http://php.net/get/php-5.3.29.tar.bz2/from/this/mirror -O php-5.3.29.tar.bz2
    tar jxf php-5.3.29.tar.bz2
    cd /usr/local/src/php5.3-build/php-5.3.29
  6. ./configure --prefix=/opt/php-5.3 --enable-mbstring --with-libxml-dir=/usr --enable-soap --with-curl --with-mcrypt --with-zlib --disable-rpath --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --enable-exif --enable-bcmath --with-mhash --enable-zip --with-pcre-regex --with-pdo-mysql --with-mysql --with-mysqli --with-mysql-sock=/var/run/mysqld/mysqld.sock --with-jpeg-dir=/usr --with-png-dir=/usr --enable-gd-native-ttf --with-openssl=/opt/openssl --with-fpm-user=www-data --with-fpm-group=www-data --with-libdir=/lib/x86_64-linux-gnu --enable-ftp --with-kerberos --with-gettext --with-xmlrpc --with-xsl --enable-opcache --enable-fpm # 配置
    php5.3-6.png
  7. make && make install # 编译安装
    php5.3-8.png
  8. 复制默认的php.ini及fpm配置文件

    cp /usr/local/src/php5.3-build/php-5.3.29/php.ini-production /opt/php-5.3/lib/php.ini
    cp /opt/php-5.3/etc/php-fpm.conf.default /opt/php-5.3/etc/php-fpm.conf
  9. vi /lib/systemd/system/php-5.3-fpm.service # 配置php5.3-fpm服务

    [Unit]
    Description=The PHP 5.3 FastCGI Process Manager
    After=network.target
    
    [Service]
    Type=simple
    PIDFile=/opt/php-5.3/var/run/php-fpm.pid
    ExecStart=/opt/php-5.3/sbin/php-fpm --nodaemonize --fpm-config /opt/php-5.3/etc/php-fpm.conf
    ExecReload=/bin/kill -USR2 $MAINPID
    
    [Install]
    WantedBy=multi-user.target
  10. systemctl start php-5.3-fpm.service # 启动php5.3-fpm
    php5.3-9.png
  11. 在相应的站点配置内容中,将php交由 php5.3 处理
    php5.3-10.png
  12. phpinfo输出及phpmyadmin操作,基本正常
    php5.3-11.png

参考:

面试记 - 深圳同方信息技术有限公司

4月20日面试的,失败了,所以现在补记。

是在“中国人才热线”投的在线简历,电话通知我面试“网络工程师”的。面试的地点是白沙物流园附近,离当时住的松枰村不远。

约好的时间是下午三点,两点半时还在下着毛毛雨,我姐叫我拿把伞去。地方不难找,用手机地图导航,在大门口填来访登记后,保安告诉我,前边那栋大厅二楼就是。

tong-fang-1.jpg

进了楼,看到有一个羽毛球场,两张乒乓球台,楼梯的形状是有些弯,台阶不多,有点象展厅的入口。在前台的一个保安衣着的大哥问了我的来意后,叫我填来访表。之后问我的简历,我说没有,电子版的可不可以。然后大哥叫我到沙发上坐。坐了几分钟,其间有个拖行李箱的外国佬准备离开,和某些大佬打招呼(英语),大概是接送的问题吧。之后,保安大哥拿份对开的纸让我填写简历。

我不知道在“工作经验”里填写什么,想了想,写了“安群电脑店”,职位写“店长”。填好里边的两页,大哥路过时,提醒我翻开底页,那里还有地方要签名。我还在看,但大哥觉得差不多了,就收走了,同时还了他的笔,他笑我面试什么也没带。

交简历后,继续在沙发上等,之后一个戴眼镜的小伙拿着纸,小声问我是不是来面试的。我说是,之后我们就在从前台沙发转到旁边一隔栏相隔的沙发上谈。小伙问我对网络有多熟悉,我说家庭或宿舍小型局域网没问题。问我如遇到断网,怎么处理,我答先看是单点还是成片出问题,是网线还是网络设备故障。再问对装系统之类的是否熟悉,我问是哪种系统,是不是Windows 10,小伙说公司用的是Ubuntu,问我列举一下知道到的命令,我答,重启服务的systemctl,复制的cp,列出文件的ls等。可能小伙觉得我简历上写得内容少,也不知道继续提什么问题了,说他是搞编程开发的,对网络细节也不是很懂,叫我先坐一下。

我在第二张沙发上等,看这个公司的人在过道里走来走去,偶尔还有喊名字的。有一个光头,个子很大的,发现了我,在过道上问我干什么的,我答是面试的。问面试什么职位,我说是“网络工程师”。问我之前做过没有,我答没做过。光头大佬叫了一声,“我的天啊,你没做过(但来面试)。”然后,穿黑正装的大姐拿着纸,对我说,到那边,经理跟你谈谈。

我又回到了前台厅的沙发,想在光头大佬旁坐下,但他说他有病,需要保持距离。正装的大姐听了,笑了笑。光头大佬拿着我的简历,问我具体有哪些工作经验。我说帮网店客户安装基本的web软件,为邻居装装系统,设置WIFI之类的。他问我没有在公司企业的工作经验,我说没有。他指了指天花四周,说如果你来安装视频监控,会吗?我答店里的监控是我自己安装的,用网线连接的,走数据也走供电。他说,那是PoE,考考你,里边有几根线?我答,八根。他问,网线可以多长?我答,我店里的有八米左右,理论上可以多长,我没查。之后,光头大佬在我的简历里画了一个圈,说他问完了,叫一个懂网络的问你。

再之后,我又回到了旁边隔间的沙发上,这次是一个戴眼镜,有点象汪峰,好帅且成熟。他跟我谈“AlphaGo”,说这东西厉害,下棋把人都打败了,主要是收集了大量的棋的走法数据,再判断赢棋。但新一代“AlphaGo Zero”更甚,不用沿着人的已有棋谱来走棋了,自己跟自己下,自动学习。说现在的集群,算法统筹很厉害,问我没有相关的项目实践过,我答没有。他说公司现在是处理在后端,用户前端主要是交互,配置内网和外网,两者相互隔离又有联系,问我有没有相关的建设和维护经验。我答,早之前的用“瘦客户端”和现在的“云桌面”工作概念听过介绍,但没实践过。“汪峰”问我有没用过Linux,我说经常用,不过是命令行,且是针对web基本维护,用的是Debian。“汪峰”说他在电脑里发出一封电子邮件,问我这封邮件是怎么到达目的地的。我答,邮件先到默认网关,然后再沿级路由到目的地。“汪峰”说,能不能讲具体些,他耐心地拿现实中寄平信的例子,人投信到邮箱,本地邮局根据地址分拣,送到上一级市、省级邮局,再下发到市、县邮局,再到街道派送员。我答,电子邮件是以以太网封包,包上有IP地址和掩码,然后网关系统会根据封包上的目的地址,掩码等信息交给下一跳路由设备。最后,他又问,看简历上有这么多的空档期,为什么现在想出来做事情。我说想出来学习一下新事物,在老家有很多东西接触不了。他叫我等。

我一个人坐在沙发上,又观察来来往往的人,有戴口罩的,有男的,有女的。之后,正装姐拿着纸对我说,一周后出面试结果,问我要不要水喝。我说不用了,要不要再登记离开记录,她也说不用了。我转过身,听到保安大哥招呼正装姐过去,可能有话要说吧。

走回松坪村,在松坪小学附近,遇到小学生放学,他们多年轻啊。

tong-fang-2.jpg

假如将来我哪天也招人,不管来面试的有没有录用,都会通知结果,哪怕是通过邮件,微信之类的。

在 CentOS 6 里安装 OpenJDK 1.8 和 Tomcat 8.5

环境:阿里云ECS云服务器 CentOS 6.9 64位

过程:

  1. yum update # 更新软件
    openjdk-1.png
  2. yum install java-1.8.0-openjdk-devel # 安装 OpenJDK 1.8
    openjdk-2.png
  3. wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v8.5.31/bin/apache-tomcat-8.5.31.tar.gz # 从国内镜像站点中下载 tomcat 8.5 安装包
  4. tar zxvf apache-tomcat-8.5.31.tar.gz # 解压缩 tomcat
  5. mv apache-tomcat-8.5.31 /usr/tomcat8 # 移到 /usr/tomcat8 目录
  6. useradd -M -d /usr/tomcat8 tomcat8 # 添加 tomcat8 用户
  7. chown -R tomcat8. /usr/tomcat8 # 更改目录属主
  8. vi /etc/rc.d/init.d/tomcat8 # 创建 tomcat 启动脚本

    #!/bin/bash
    
    # Tomcat8: Start/Stop Tomcat 8
    #
    # chkconfig: - 90 10
    # description: Tomcat is a Java application Server.
    
    . /etc/init.d/functions
    . /etc/sysconfig/network
    
    CATALINA_HOME=/usr/tomcat8
    TOMCAT_USER=tomcat8
    
    LOCKFILE=/var/lock/subsys/tomcat8
    
    RETVAL=0
    start(){
    echo "Starting Tomcat8: "
    su - $TOMCAT_USER -c "$CATALINA_HOME/bin/startup.sh"
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && touch $LOCKFILE
    return $RETVAL
    }
    
    stop(){
    echo "Shutting down Tomcat8: "
    $CATALINA_HOME/bin/shutdown.sh
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && rm -f $LOCKFILE
    return $RETVAL
    }
    
    case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    *)
        echo $"Usage: $0 {start|stop|restart}"
        exit 1
        ;;
    esac
    exit $?
  9. chmod 755 /etc/rc.d/init.d/tomcat8 # 令启动脚本可执行
  10. /etc/rc.d/init.d/tomcat8 start # 手动启动 tomcat
    openjdk-3.png
  11. chkconfig --add tomcat8 # 将 tomcat8 添加到服务
  12. chkconfig tomcat8 on # 令 tomcat8 服务随系统启动自动启动
    openjdk-4.png

参考: