精华内容
下载资源
问答
  • 最近写一个网页,遇到邮箱的问题,想要实现点击进入发送邮箱页面,从网上查看,发现在a 链接中加入一属性(“mailto: aaa@5icool.org”),可以解决这个问题。 代码如下: aaa 加入此代码便可实现   参考网站...

     最近写一个网页,遇到邮箱的问题,想要实现点击进入发送邮箱的页面,从网上查看,发现在a 链接中加入一属性(“mailto: aaa@5icool.org”),可以解决这个问题。

    代码如下:

    <a href="mailto:aaa@5icool.org">aaa</a>
    加入此代码便可实现

     

    参考网站:http://www.5icool.org/a/201003/308.html

    展开全文
  • 下面分享一个监控脚本,并利用sendemail进行邮件发送。 监控脚本如下: 下面是写了一个多线程的网站状态检测脚本,直接从文件中读出站点地址,然后用curl去检测返回码,发现速度非常好,基本几秒钟内就能出结果。 ...
    对公司几个主要站点的域名访问情况进行监控。下面分享一个监控脚本,并利用sendemail进行邮件发送。 
    

    监控脚本如下:
    下面是写了一个多线程的网站状态检测脚本,直接从文件中读出站点地址,然后用curl去检测返回码,发现速度非常好,基本几秒钟内就能出结果。

    [root@bastion-IDC ~]# cat url-monit.sh
    #!/bin/bash
    #取出网站数据
    data=`cat /root/url.list`
    if [ -z "$data" ];then
    echo "Faild to connect database!"
    exit 1
    fi
    test -f result.log && rm -f result.log
    function delay {
    sleep 2
    }
    tmp_fifofile=/tmp/$$.fifo
    mkfifo $tmp_fifofile
    exec 6<>$tmp_fifofile
    rm $tmp_fifofile
    #定义并发线程数,需根据vps配置进行调整。
    thread=100
    for ((i=0 ;i<$thread;i++ ))
    do
    echo
    done>&6
    #开始多线程循环检测
    for url in $data
    do
    read -u6
    {
    #curl抓取网站http状态码
    code=`curl -o /dev/null --retry 3 --retry-max-time 8 -s -w %{http_code} $url`
    echo "HTTP Status of $url is $code ">>result.log
    #判断子线程是否执行成功,并输出结果
    delay && {
    echo "HTTP Status of $url is $code"
    } || {
    echo "Check thread error!"
    }
    echo >& 6
    }&
    done
    #等待所有线程执行完毕
    wait
    exec 6>&-
    exit 0

     

    [root@bastion-IDC ~]# cat url.list
    www.fangfull.com
    www.huanqiu.com
    erp.fangfull.com
    fanghuadmin.huanqiu.com
    www.hqsbtime.com
    qmjjr.huanqiu.com
    admin.huanqiu.com
    m.huanqiu.com
    fq.huanqiu.com
    mfq.huanqiu.com
    zc.huanqiu.com
    mzc.huanqiu.com
    uc.huanqiu.com
    fanghu.huanqiu.com
    img.huanqiu.com
    app.huanqiu.com

    www.fangfull.cn
    www.huanqiu.wang.com

     

    执行脚本:

    [root@bastion-IDC ~]# sh url-monit.sh
    HTTP Status of app.huanqiu.com is 301
    HTTP Status of fanghu.huanqiu.com is 301
    HTTP Status of www.huanqiu.com is 301
    HTTP Status of fanghuadmin.huanqiu.com is 301
    HTTP Status of admin.huanqiu.com is 301
    HTTP Status of mfq.huanqiu.com is 301
    HTTP Status of zc.huanqiu.com is 301
    HTTP Status of erp.fangfull.com is 302
    HTTP Status of www.fangfull.com is 200
    HTTP Status of fq.huanqiu.com is 301
    HTTP Status of img.huanqiu.com is 301
    HTTP Status of www.hqsbtime.com is 200
    HTTP Status of mzc.huanqiu.com is 301
    HTTP Status of www.fangfull.cn is 000
    HTTP Status of uc.huanqiu.com is 301
    HTTP Status of qmjjr.huanqiu.com is 301
    HTTP Status of m.huanqiu.com is 301
    HTTP Status of www.huanqiu.wang.com is 000

     

     

    测试利用上面的多线程的网站状态检测脚本的执行时间,如下,12s多执行完毕!
    [root@bastion-IDC ~]# time sh url-monit.sh
    HTTP Status of app.huanqiu.com is 301
    HTTP Status of fanghu.huanqiu.com is 301
    HTTP Status of www.huanqiu.com is 301
    HTTP Status of fanghuadmin.huanqiu.com is 301
    HTTP Status of admin.huanqiu.com is 301
    HTTP Status of mfq.huanqiu.com is 301
    HTTP Status of zc.huanqiu.com is 301
    HTTP Status of erp.fangfull.com is 302
    HTTP Status of www.fangfull.com is 200
    HTTP Status of fq.huanqiu.com is 301
    HTTP Status of img.huanqiu.com is 301
    HTTP Status of www.hqsbtime.com is 200
    HTTP Status of mzc.huanqiu.com is 301
    HTTP Status of www.fangfull.cn is 000
    HTTP Status of uc.huanqiu.com is 301
    HTTP Status of qmjjr.huanqiu.com is 301
    HTTP Status of m.huanqiu.com is 301
    HTTP Status of www.huanqiu.wang.com is 000

     

    real 0m12.782s
    user 0m0.085s
    sys 0m0.096s

     

     

    下面再测试直接curl监测网站状态的时间:
    [root@bastion-IDC ~]# cat testurl-monit.sh
    #!/bin/bash

    for url in `cat /root/url.list`
    do
    code=`curl -I -s $url | head -1 | cut -d " " -f2`
    echo "HTTP Status of $url is $code "
    done

     

     

    如下,这个脚本执行时间要30s多!
    [root@bastion-IDC ~]# time sh testurl-monit.sh
    HTTP Status of www.fangfull.com is 200
    HTTP Status of www.huanqiu.com is 301
    HTTP Status of erp.fangfull.com is 302
    HTTP Status of fanghuadmin.huanqiu.com is 301
    HTTP Status of www.hqsbtime.com is 200
    HTTP Status of qmjjr.huanqiu.com is 301
    HTTP Status of admin.huanqiu.com is 301
    HTTP Status of m.huanqiu.com is 301
    HTTP Status of fq.huanqiu.com is 301
    HTTP Status of mfq.huanqiu.com is 301
    HTTP Status of zc.huanqiu.com is 301
    HTTP Status of mzc.huanqiu.com is 301
    HTTP Status of uc.huanqiu.com is 301
    HTTP Status of fanghu.huanqiu.com is 301
    HTTP Status of img.huanqiu.com is 301
    HTTP Status of app.huanqiu.com is 301
    HTTP Status of www.fangfull.cn is
    HTTP Status of www.huanqiu.wang.com is

     

    real 0m31.689s
    user 0m0.067s
    sys 0m0.124s

     


    显然多线程的测试脚本执行速度要快点!所以保留第一个脚本url-monit.sh!


    -------------------------------------------------------------------------------------------------------
    下面是邮件报警设置:

    1)先下载安装包到本地,解压。
    [root@bastion-IDC ~]# cd /usr/local/src/
    [root@bastion-IDC src]# wget -c http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
    [root@bastion-IDC src]# tar -zvxf sendEmail-v1.56.tar.gz
    [root@bastion-IDC src]# cd sendEmail-v1.56
    [root@bastion-IDC sendEmail-v1.56]# cp -a sendEmail /usr/local/bin/
    [root@bastion-IDC sendEmail-v1.56]# chmod +x /usr/local/bin/sendEmail
    [root@bastion-IDC sendEmail-v1.56]# file /usr/local/bin/sendEmail
    /usr/local/bin/sendEmail: a /usr/bin/perl -w script text executable

    2)安装下依赖
    [root@bastion-IDC sendEmail-v1.56]# yum install perl-Net-SSLeay perl-IO-Socket-SSL -y


    3)部署发送脚本

    这里由于一些域名做了跳转,所以如果发现域名访问后的结果不是200,301,302,那么就是不能正常访问状态,需要发送报警邮件!

    如下,报警邮件发送给wangshibo@huanqiu.cn和hugang@huanqiu.cn两个邮箱:
    [root@bastion-IDC ~]# cat url-mail.sh
    #!/bin/bash
    NUM=$(/bin/sh /root/url-monit.sh|grep -v "200"|grep -v "301"|grep -v "302"|wc -l)
    DOMAIN=$(/bin/sh /root/url-monit.sh|grep -v "200"|grep -v "301"|grep -v "302"|awk -F" " '{print $4}')
    if [ $NUM -ne 0 ];then
    for url in $DOMAIN;do
    /usr/local/bin/sendEmail -f ops@huanqiu.cn -t wangshibo@huanqiu.cn -s smtp.huanqiu.cn -u "Domain monitoring" -o message-content-type=html -o message-charset=utf8 -xu ops@huanqiu.cn -xp zh@123bj -m "[$url] can not normally access,please deal with it as soon as possible "
    /usr/local/bin/sendEmail -f ops@huanqiu.cn -t hugang@huanqiu.cn -s smtp.huanqiu.cn -u "Domain monitoring" -o message-content-type=html -o message-charset=utf8 -xu ops@huanqiu.cn -xp zh@123bj -m "[$url] can not normally access,please deal with it as soon as possible "
    done
    else
    echo "it is OK"
    fi

     

    -----------------------------------------------------------------
    邮件发送参数说明:
    命令说明:
    /usr/local/bin/sendEmail                           #命令主程序
    -f from@uhanqiu.cn                                 #发件人邮箱
    -t to@huanqiu.cn                                     #收件人邮箱
    -s smtp.huanqi.cn                                     #发件人邮箱的smtp服务器
    -u "....."                                                   #邮件的标题
    -o message-content-type=html                #邮件内容的格式,html表示它是html格式
    -o message-charset=utf8                        #邮件内容编码
    -xu from@huanqiu.cn                               #发件人邮箱的用户名
    -xp zh@123bj                                         #发件人邮箱密码
    -m "......"                                                #邮件的具体内容
    -----------------------------------------------------------------

     

    [root@bastion-IDC ~]# sh -x url-mail.sh
    ++ /bin/sh /root/url-monit.sh
    ++ grep -v 200
    ++ grep -v 301
    ++ grep -v 302
    ++ wc -l
    + NUM=2
    ++ /bin/sh /root/url-monit.sh
    ++ grep -v 200
    ++ grep -v 301
    ++ grep -v 302
    ++ awk '-F ' '{print $4}'
    + DOMAIN='www.fangfull.cn
    www.huanqiu.wang.com'
    + '[' 2 -ne 0 ']'
    + for url in '$DOMAIN'
    + /usr/local/bin/sendEmail -f ops@huanqiu.cn -t wangshibo@huanqiu.cn -s smtp.huanqiu.cn -u 'Domain monitoring' -o message-content-type=html -o message-charset=utf8 -xu ops@huanqiu.cn -xp zh@123bj -m '[www.fangfull.cn] can not normally access,please deal with it as soon as possible '
    Oct 25 19:21:43 bastion-idc sendEmail[19668]: Email was sent successfully!
    + for url in '$DOMAIN'
    + /usr/local/bin/sendEmail -f ops@huanqiu.cn -t wangshibo@huanqiu.cn -s smtp.huanqiu.cn -u 'Domain monitoring' -o message-content-type=html -o message-charset=utf8 -xu ops@huanqiu.cn -xp zh@123bj -m '[www.huanqiu.wang.com] can not normally access,please deal with it as soon as possible '
    Oct 25 19:21:47 bastion-idc sendEmail[19672]: Email was sent successfully!
    + for url in '$DOMAIN'
    + /usr/local/bin/sendEmail -f ops@huanqiu.cn -t huang@huanqiu.cn -s smtp.huanqiu.cn -u 'Domain monitoring' -o message-content-type=html -o message-charset=utf8 -xu ops@huanqiu.cn -xp zh@123bj -m '[www.fangfull.cn] can not normally access,please deal with it as soon as possible '
    Oct 25 19:21:43 bastion-idc sendEmail[19668]: Email was sent successfully!
    + for url in '$DOMAIN'
    + /usr/local/bin/sendEmail -f ops@huanqiu.cn -t hugang@huanqiu.cn -s smtp.huanqiu.cn -u 'Domain monitoring' -o message-content-type=html -o message-charset=utf8 -xu ops@huanqiu.cn -xp zh@123bj -m '[www.huanqiu.wang.com] can not normally access,please deal with it as soon as possible '
    Oct 25 19:21:47 bastion-idc sendEmail[19672]: Email was sent successfully!

     


    登陆wangshibo@huanqiu.cn邮箱,发现已经收到报警邮件了!

     

     

     

    最后添加计划任务,每5分钟执行一次
    [root@bastion-IDC ~]# crontab -l
    #domain monit
    */5 * * * * /bin/bash -x /root/url-mail.sh >/dev/null 2>&1

     

    ***************当你发现自己的才华撑不起野心时,就请安静下来学习吧***************
    展开全文
  • 前言:当前有个任务是要把几个网站的日志返回状态码进行汇总,用饼图展示,并每天发送邮件。一、分析问题 画出饼图,这个我用kibana给画出来了,下面不讲解; 截取饼图,因为kibana是用js展示出来的,而不真的...

    前言:当前有个任务是要把几个网站的日志返回状态码进行汇总,用饼图展示,并每天发送邮件。


    一、分析问题

    1. 画出饼图,这个我用kibana给画出来了,下面不做讲解;
    2. 截取饼图,因为kibana是用js展示出来的,而不真的是一张jpg的图片,如何截取你想要的图片;
    3. 发送截图,想到利用python发送邮件,但发出来总是以附件形式,而我想直接在邮件里展示截图;
    • 知道问题了,下面讲具体的解决问题过程

    二、安装 PhantomJS

    1. 安装依赖包

    yum install gcc gcc-c++ make git openssl-devel freetype-devel fontconfig-devel 

    2. 下载 phantomjs

    git clone git://github.com/ariya/phantomjs.git 

    3. 编译 phantomjs

    cd phantomjs 
    git checkout 1.9 
    ./build.sh
    • 此过程比较耗时,可以先去打个飞机,编译完这个目录大概有700多M

    4. 测试

    cat baidu.js

    var page = require('webpage').create();
    page.open('http://www.baidu.com', function () {
        page.render('baidu.png');
        phantom.exit();
    });

    运行

    ./phantomjs/bin/phantomjs baidu.js

    可以看到本地生产的baidu.png

    baidu
    看,它会把整个页面给截下来,下面我们继续进行细致的截图。

    三、按要求截图

    • 先看看原网页

    kibana
    我们只要中间的饼图和它上面的一行状态码数量统计,

    1. 改善脚本1

    cat kibana.js

    var page=require('webpage').create();
    var address='http://log.xxx.cn/#/dashboard/file/sla.json';   // 设置url
    var output='kiban.png';  // 设置保存文件名
    page.viewportSize={width:1024,height:800};    // 设置查看页面的分辨率
    page.open(address,function(status){
    if(status!=='success'){
    console.log('Unabletoloadtheaddress!');
    phantom.exit();
    }else{
    window.setTimeout(function(){
    page.clipRect={top:170, left:10, height: 330, width: 980};  // 设置页边距,从而获取想要的图片,需要慢慢调整
    page.render(output);  // 保存图片
    phantom.exit();
    },20000);
    }
    });

    运行,可以得到如下图:

    Paste_Image.png

    你也可以只要中间的饼图,为了方便用同样的方法获得其他网页的统计截图,再次修改下脚本

    2. 改善脚本2

    cat kibana.js

    var page=require('webpage').create();
    var address = phantom.args[0];
    var output = phantom.args[1];
    page.viewportSize={width:1024,height:800};    // 设置查看页面的分辨率
    page.open(address,function(status){
    if(status!=='success'){
    console.log('Unabletoloadtheaddress!');
    phantom.exit();
    }else{
    window.setTimeout(function(){
    page.clipRect={top:170, left:10, height: 330, width: 980};  // 设置页边距,从而获取想要的图片,需要慢慢调整
    page.render(output);  // 保存图片
    phantom.exit();
    },20000);
    }
    });

    如上,我们把url和文件名改成接收参数
    运行:

    ./phantomjs/bin/phantomjs kibana.js  http://log.xxx.cn/#/dashboard/file/sla.json kibana.png

    我们只需要变换url和文件名,就可以获得其他统计图,完成后我们把它加到邮件发出去

    四、发送邮件

    • python发邮件没啥好说的,网上有很多脚本,我也是在网上撸的脚本,刚开始邮件是能发,但是发的图片总是以附件形式展示,而不是打开邮件就能看到截图,在网上找了好久终于找到 Python/Perl 如何在HTML邮件正文中嵌入本地图片,原来要先把图片插入html页面,然后以html形式发送邮件,最后脚本如下:
      cat send_page.py
    #!/usr/bin/env python
    #coding:utf8
    import smtplib
    from email.mime.multipart import MIMEMultipart
    from email.mime.base import MIMEBase
    from email.mime.text import MIMEText
    from email.mime.image import MIMEImage
    from email import encoders
    import sys
    import os
    from datetime import * 
    # 定义函数
    def send_mail(to_list, sub):
            me = mail_user + "<"+mail_user+"@"+mail_postfix+">"
            msg = MIMEMultipart()
            msg['Subject'] = sub
            msg['From'] = me
            msg['To'] = "".join(to_list)
    
            # 生成不同的url,并通过/root/kibana.js 生成不同的png图片
            for i in ('node', 'mapi', 'api', 'yunying-sla'):
                os.system("/root/phantomjs/bin/phantomjs /root/kibana.js http://log.xxx.cn/#/dashboard/file/%s.json %s.png" % (i,i)) 
                #二进制模式读取图片,并绑定到邮件头
                with open(i+'.png', 'rb') as fp:
                    img = MIMEImage(fp.read())
                    img.add_header('Content-ID', i)
                    msg.attach(img)
    
            # kibana会收集从此刻算起前24小时的数据,我在邮件开头记录时间间隔,
            d = datetime.now()
            dt = d.strftime('%Y-%m-%d %H:%M:%S')
            at = (d - timedelta(1)).strftime('%Y-%m-%d %H:%M:%S')
            timezone  = at + ' ~ ' + dt
    
            #构造html
            html = """\
            <html>
              <body>
                <p>采集时间: """ + timezone + """</p>
      <p>
                <a href="http://log.xxx.cn/#/dashboard/file/node.json">node</a>
                </p>
                [img src="cid:node" alt="node">
                <p>
                <a href="http://log.xxx.cn/#/dashboard/file/mapi.json">mapi</a>
                </p>
                [img src="cid:mapi" alt="mapi" >
                <p>
                <a href="http://log.xxx.cn/#/dashboard/file/api.json">api</a>
                </p>
                [img src="cid:api" alt="api" >
                <p>
                <a href="http://log.xxx.cn/#/dashboard/file/yunying-sla.json">yunying</a>
                </p>
                [img src="cid:yunying-sla" alt="yunying-sla" >
              </body>
            </html>
            """
    # 请把 [img 换成 <img
            context = MIMEText(html,_subtype='html',_charset='utf-8')  #定义发送的形式和编码格式,这里以html形式发送
            msg.attach(context) 
    
            try:
                    send_smtp = smtplib.SMTP()
                    send_smtp.connect(mail_host)
                    send_smtp.login(mail_user, mail_pass)
                    send_smtp.sendmail(me, to_list, msg.as_string())
                    send_smtp.close()
                    return True
            except Exception, e:
                    print str(e)[1]
                    return False
    # 设置服务器名称、用户名、密码以及邮件后缀
    mail_host = 'smtp.xxx.com'
    mail_user = 'jianwen.lu@xxx.com'
    mail_pass = '8888888888'
    mail_postfix = "xxx.com"
    #mailto_list = ["763836801@qq.com","jianwen.lu@weimob.com"]
    mailto_lists = sys.argv[1]
    mailto_list = mailto_lists.split(',')   #发送多人
    sub= sys.argv[2]
    # send_mail
    if send_mail(mailto_list, sub):
            print "Send mail succed!"
    else:
            print "Send mail failed!"

    运行:

    python send_sla.py jianwen.lu@xxx.com "网站服务状态sla"

    由于es查询日志,并给kibana展示需要花点时间,所以你最好去打个飞机再来
    我们收下邮件:

    mail
    点击蓝色字体,还可以直接去页面看


    好了,至此,做好计划任务,等着每天发图了,啦啦啦。

    展开全文
  • java发送邮件

    千次阅读 2018-10-12 13:51:14
    java发送邮件,及邮件验证码  最近在市新闻网站的项目,有一个功能是用户忘记密码,通过邮件验证码等其他信息修改密码。...2、要想实现邮件发送功能,必须准备一个可以正常使用的邮箱,同时这个邮箱要开启POP...

    java发送邮件,及邮件验证码


           最近在做市新闻网站的项目,有一个功能是用户忘记密码,通过邮件验证码等其他信息修改密码。不过现在的身份验证个人觉着手机验证码更加方便灵活,不过公司要求用邮箱那就用邮箱吧。


    1、想要完成邮件发送功能,需要导入一个jar包--commons-email-1.4.jar。

    2、要想实现邮件发送功能,必须准备一个可以正常使用的邮箱,同时这个邮箱要开启POP3/SMTP服务。我使用的是QQ邮箱,开启POP3/SMTP服务的方法如下:

        (1)登录QQ邮箱,点击顶部--设置--账户--POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务(图片中我的pop3服务已经开启了)。

     

           

    (2)如果你的服务是关闭状态,则点击后面的开启,会弹出一个对话框。要求使用绑定的手机号发送一条短信,发送成功后,点击“我已发送”。

    (3)点击后页面弹出另一个对话框,在对话框中会有一个16位的授权码,记录下来,以后会用。

    3、导入jar,完成邮箱的服务开启后,需要编写邮件发送的方法,我使用的是springboot项目。

    public class SendMailUtil {
    
        private static final String from = "发件人邮箱";
    
        private static final String fromName = "邮件的标题";
    
        private static final String charSet = "utf-8";
    
        private static final String username = "发件人邮箱";
    
        private static final String password = "开启发件邮箱pop3服务时的授权码";
    
        private static final String subject = "邮件的主题";
    
        private static Map<String, String> hostMap = new HashMap<String, String>();
        static {
            // 126
            hostMap.put("smtp.126", "smtp.126.com");
            // qq
            hostMap.put("smtp.qq", "smtp.qq.com");
    
            // 163
            hostMap.put("smtp.163", "smtp.163.com");
    
            // sina
            hostMap.put("smtp.sina", "smtp.sina.com");
    
            // tom
            hostMap.put("smtp.tom", "smtp.tom.com");
    
            // 263
            hostMap.put("smtp.263", "smtp.263.net");
    
            // yahoo
            hostMap.put("smtp.yahoo", "smtp.mail.yahoo.com");
    
            // hotmail
            hostMap.put("smtp.hotmail", "smtp.live.com");
    
            // gmail
            hostMap.put("smtp.gmail", "smtp.gmail.com");
            hostMap.put("smtp.port.gmail", "465");
    
            // sygongzhi.com
            hostMap.put("smtp.sygongzhi", "smtp.mxhichina.com");
    
        }
    
        private static boolean validate = true;// 是否需要身份验证
    
        public static Properties getProperties() throws Exception {
            Properties p = new Properties();
            p.put("mail.smtp.host", getHost(from));
            p.put("mail.smtp.port", getSmtpPort(from));
            p.put("mail.smtp.auth", validate ? "true" : "false");
            return p;
        }
    
        public static String getHost(String email) throws Exception {
            Pattern pattern = Pattern.compile("\\w+@(\\w+)(\\.\\w+){1,2}");
            Matcher matcher = pattern.matcher(email);
            String key = "unSupportEmail";
            if (matcher.find()) {
                key = "smtp." + matcher.group(1);
            }
            if (hostMap.containsKey(key)) {
                return hostMap.get(key);
            } else {
                throw new Exception("unSupportEmail");
            }
        }
    
        public static int getSmtpPort(String email) throws Exception {
            Pattern pattern = Pattern.compile("\\w+@(\\w+)(\\.\\w+){1,2}");
            Matcher matcher = pattern.matcher(email);
            String key = "unSupportEmail";
            if (matcher.find()) {
                key = "smtp.port." + matcher.group(1);
            }
            if (hostMap.containsKey(key)) {
                return Integer.parseInt(hostMap.get(key));
            } else {
                return 25;
            }
        }
    
        /**
         * 发送普通邮件
         * 
         * @param toMailAddr
         *            收信人地址
         * @param subject
         *            email主题
         * @param message
         *            发送email信息
         */
        public static void sendCommonMail(String toMailAddr, String subject, String message) {
            HtmlEmail hemail = new HtmlEmail();
            try {
                hemail.setHostName(getHost(from));
                hemail.setSmtpPort(getSmtpPort(from));
                hemail.setCharset(charSet);
                hemail.addTo(toMailAddr);
                hemail.setFrom(from, fromName);
                hemail.setAuthentication(username, password);
                hemail.setSubject(subject);
                hemail.setMsg(message);
                hemail.send();
                System.out.println("email send true!");
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("email send error!");
            }
    
        }
    
        // @SuppressWarnings("unchecked")
        public static String getAppPath(Class<?> cls) {
            // 检查用户传入的参数是否为空
            if (cls == null)
                throw new IllegalArgumentException("参数不能为空!");
            ClassLoader loader = cls.getClassLoader();
            // 获得类的全名,包括包名
            String clsName = cls.getName() + ".class";
            // 获得传入参数所在的包
            Package pack = cls.getPackage();
            String path = "";
            // 如果不是匿名包,将包名转化为路径
            if (pack != null) {
                String packName = pack.getName();
                // 此处简单判定是否是Java基础类库,防止用户传入JDK内置的类库
                if (packName.startsWith("java.") || packName.startsWith("javax."))
                    throw new IllegalArgumentException("不要传送系统类!");
                // 在类的名称中,去掉包名的部分,获得类的文件名
                clsName = clsName.substring(packName.length() + 1);
                // 判定包名是否是简单包名,如果是,则直接将包名转换为路径,
                if (packName.indexOf(".") < 0)
                    path = packName + "/";
                else {// 否则按照包名的组成部分,将包名转换为路径
                    int start = 0, end = 0;
                    end = packName.indexOf(".");
                    while (end != -1) {
                        path = path + packName.substring(start, end) + "/";
                        start = end + 1;
                        end = packName.indexOf(".", start);
                    }
                    path = path + packName.substring(start) + "/";
                }
            }
            // 调用ClassLoader的getResource方法,传入包含路径信息的类文件名
            java.net.URL url = loader.getResource(path + clsName);
            // 从URL对象中获取路径信息
            String realPath = url.getPath();
            // 去掉路径信息中的协议名"file:"
            int pos = realPath.indexOf("file:");
            if (pos > -1)
                realPath = realPath.substring(pos + 5);
            // 去掉路径信息最后包含类文件信息的部分,得到类所在的路径
            pos = realPath.indexOf(path + clsName);
            realPath = realPath.substring(0, pos - 1);
            // 如果类文件被打包到JAR等文件中时,去掉对应的JAR等打包文件名
            if (realPath.endsWith("!"))
                realPath = realPath.substring(0, realPath.lastIndexOf("/"));
            /*------------------------------------------------------------
             ClassLoader的getResource方法使用了utf-8对路径信息进行了编码,当路径
              中存在中文和空格时,他会对这些字符进行转换,这样,得到的往往不是我们想要
              的真实路径,在此,调用了URLDecoder的decode方法进行解码,以便得到原始的
              中文及空格路径
            -------------------------------------------------------------*/
            try {
                realPath = java.net.URLDecoder.decode(realPath, "utf-8");
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
            System.out.println("realPath----->" + realPath);
            return realPath;
        }
    }

    4、写一个controller,调用上面的方法。

    @Controller
    @RequestMapping(value = "/email")
    public class testSendEmail {
    
    
        @RequestMapping(value = "/sendEmail")
        @ResponseBody
        public void sendEmail(){
    
            SendMailUtil.sendCommonMail("要发送的目标邮箱","邮件主题","邮件内容");
        }
    }
    

     

    展开全文
  • 如何在html网页中提交表单直接发送邮箱?此问题一直困扰了我很久很久,后来了解到jmail组件可以解决此问题,而且现在的付费空间基本都会有此组件。分别建立表单页和asp页面,提交表单后通过asp页面调用jmail组件,...
  • 【摘要】利用WEB页从WEB服务器发送电子邮件不仅具有隐私性,还具有直观、方便和快捷的特点,本文应用Microsoft 公司推出的ASP.NET实现上述功能。 【关键词】WEB页 电子邮件 通常的WEB网站虽然已经能够提供较多的...
  • 作为PHP入门开发者,常常有这种述求:自己的网站中需要添加一个使用自己的域名作为发件人邮件地址的自动发送邮件的方法,用于诸如给用户发送验证码、通知信息等。比如:我的某个用户注册模块,需要使用register@...
  • 方法一:如果您已经有QQ号码,可以直接登陆QQ邮箱(无需注册) 进入https://mail.qq.com/直接使用QQ账号密码去登陆QQ邮箱 方法二:在没有QQ号码的情况下,您需要注册一个QQ号 可以直接进入QQ邮箱官网点击注册新账号...
  • 【Web技术】网站留言系统开发,及留言信息实时发送至指定邮箱 关键字:HTML PHP JavaScript CSS 文章目录【Web技术】网站留言系统开发,及留言信息实时发送至指定邮箱0 简述1 背景及需求分析2 可行性研究3 基础...
  • 在前端开发中,JavaScript并没有提供直接操作Email邮箱的功能方法,但是如果遇到这样的需求,我们应该如何实现js发送邮件至指定邮箱功能呢?下面列举能够在通过前端实现邮件发送的5...
  • 鉴于最近有一部分童鞋...第一种为直接发送激活邮件,用户直接点击激活链接就会挑战到相应的激活页面 第二种为发送随机校验码到用户指定的邮箱,然后用户登录邮箱复制校验码 下面我简单介绍一下2种方式的大致实现原...
  • django注册发送邮箱激活账号

    千次阅读 2019-05-19 01:10:08
    本篇博客写发送邮箱验证码,后续写发送手机验证码。 首先可以配置邮箱的一些必须的参数等 如,张三来注册 x 网站,邮箱是zhangsan@163.com,那么这个邮箱会收到激活链接,那么给他发送链接的邮箱是什么,需要我们 ...
  • PHP实现发送邮件

    千次阅读 2019-01-24 17:33:40
    不同类型的邮箱发送邮件的方式也是不同的。 下面我们就先给大家举例介绍qq邮箱开启发送邮件服务的方法。 首先我们登录qq邮箱,打开设置,选择帐户。 然后在帐户下,找到如下所示的开启服务部分。 开启服务中,前两...
  • 在用过发送发哦邮箱中的激活链接激活用户。 大概步骤如此: 1.网站用户相关表中有一个字段用来记录用户帐号是否激活。 2.当用户注册时,注册程序会自动向用户注册邮箱发送一封激活邮件,里面带激活链接(参数)
  • 使用第三方工具formspree可以表单提交和ajax提交,将表单连接到formspree的终端,formspree会通过电子邮件向提交你的内容。无需PHP,Javascript或注册 - 非常适合静态网站! 在所有表单元素(即&lt;input&...
  • PHP实现邮件发送

    千次阅读 2019-06-16 16:51:59
    网站中需要添加一个使用自己的域名作为发件人邮件地址的自动发送邮件的方法,用于诸如给用户发送验证码、通知信息等。 那么,PHP下这种使用自己的域名作为发送邮件邮件地址的方法如何实现呢? PHP环境下,是提供...
  • 在很多网站注册页面中,我们都能看到网站实现了一个自动发送邮件的功能,给你发送验证码。那么这个过程是如何实现的呢?本次实验采用SpringBoot框架。 【解决步骤】: 实现这个功能大致就是以下5个步骤: 导入支持...
  • 其实这是2010年的老文章,当时QQ邮件列表还在内测,经过两年的发展,QQ邮件列表已经成熟多了,之前的教程也过时了,加之倡萌发布的Hcms主题和Hocean主题都添加了QQ邮件列表功能,所以很有必要整理一下,方便主题使用...
  • Spring整合邮件模板定时发送

    千次阅读 2018-07-24 16:09:11
    前言 在企业级开发中,我们不可避免的使用到邮件发送,可能由于项目的需要,我们要定时定频率的给用户或者业务方发送邮件。 目录 发送邮件原理简介 ...2、QQ邮箱会根据用户A发送邮件进行解析,也就是根据收...
  • 最近学习了利用python爬虫,甚是有趣。所以写了个试用的小...所以,我就想,能不能让我的云服务器自动爬取学院网站的信息公告,把信息公告HTML格式的e-mail,然后每天早上9点钟定时自动给我发一封邮件呢。在这封邮
  •  几乎每个会员制网站都需要通过后台发送邮件来与会员进行沟通,如注册确认、营销推广。这些由站方发给会员的信件,往往纯文本格式已不能满足界面和交互的要求,这时候我们就需要发送HTML页面。由于HTML邮件不是独立...
  • 背景 ...在远程访问的情况下,实际操作ubuntu主机或者路由器往往比较费时费力,因此本文描述了一种能够自动获取公网ip地址,当发现公网ip地址变化的时候,自动发送邮件至指定邮箱通知管理员,而不需
  • as发送邮件

    千次阅读 2008-02-11 11:41:00
    asp发送邮件(email)方法集合首先是jmail.smtpmail的核心代码: Set jmail = Server.CreateObject("JMAIL.SMTPMail") 创建一个JMAIL对象 jmail.silent = true JMAIL不会抛出例外错误,返回的值为FALSE跟TRUE jmail....
  • Nginx导致页面发送给错误的用户

    千次阅读 2010-02-09 10:27:00
    对过程不感兴趣的朋友可以直接跳到步骤3.解决方案1.问题起因公司的网站使用两台Nginx反向代理,两台2008Server+IIS7后台。一段时间之前开始有用户抱怨说在进入自己的帐户页面时看到了不知道是谁的订单信息。但
  • [ASP.NET]自动发送邮件功能的实现

    千次阅读 2017-09-07 09:29:28
    有时我们需要在网站中加入发送邮件的功能,例如一个网上投稿系统,当稿件被采用的时候发送邮件通知作者。下面就以这个功能为例说明如何实现自动发送邮件。   实现发送邮件功能 首先说一下在.Net下如何发送邮件。...
  • 邀请页面关于邀请的这个功能的实现主要有如下几个途径给出邀请链接复制发送导入邮件联系人(跟找朋友类似)导入即时通讯联系人(同上,只是换成MSN等)导入联系簿文件(上传CSV等)直接发送邮件(包括高级内容的设置)实现...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 61,604
精华内容 24,641
关键字:

网站可以做页面直接发送邮箱