精华内容
下载资源
问答
  • 邮件发送

    千次阅读 2016-10-31 09:33:01
    在实际运用中,比如你淘宝购物,申请退款,这时你在邮箱中看到退款邮件,或者你注册某个账号,申请...邮件发送所需jar:fastjson-1.1.24.jar,javax.mail-1.5.6.jar 类Developer:枚举类型,发送邮件人姓名和邮箱地址

    在实际运用中,比如你淘宝购物,申请退款,这时你在邮箱中看到退款邮件,或者你注册某个账号,申请验证邮箱通知等等,这些都是邮件发送,这里将介绍下系统捕获异常发送邮件案例。

    准备工作:

    eclipse4.5 64位

    jdk1.7 64位

    邮件发送所需jar:fastjson-1.1.24.jar,javax.mail-1.5.6.jar

    类Developer:枚举类型,发送邮件人姓名和邮箱地址

    package mail;
    /**
     * @class:Developer 
     *@descript:枚举类型,发送邮件人姓名和邮箱地址
     *@date:2016年10月26日 下午8:07:50
     *@author sanghaiqin
     *@version:V1.0
     */
    public enum Developer {
    	zhoujing("周静","405687038@qq.com"),
    	peiyuxiang("裴玉翔","498736875@qq.com"),
    	yipeng("乙鹏","729325112@qq.com"),
    	liuan("刘安","2211747233@qq.com"),
    	chenyuhao("陈宇豪","631604198@qq.com"),
    	wangdong("王栋","1217295649@qq.com"),
    	sanghaiqin("桑海芹","1522580013@qq.com");
    	
    	//发件人姓名
    	private String name;
    	//发件人email
        private String mail;
        
    	private Developer() {
    		
    	}
    	
    	private Developer(String name, String mail) {
    		this.name = name;
    		this.mail = mail;
    	}
    	
    	/**
    	 * @descript:传递发件人姓名得到该发件人的邮箱
    	 * @param name  发件人姓名
    	 * @return
    	 */
    	public static String getMail(String name) {
            for (Developer c : Developer.values()) {
                if (c.getName().equals(name)) {
                    return c.mail;
                }
            }
            return null;
        }
    	
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getMail() {
    		return mail;
    	}
    	public void setMail(String mail) {
    		this.mail = mail;
    	}
        
    }
    

    类ExceptionInfo:发件人信息

    package mail;
    /**
     * @class:ExceptionInfo 
     *@descript:发件人信息
     *@date:2016年10月26日 下午8:11:27
     *@author sanghaiqin
     *@version:V1.0
     */
    public class ExceptionInfo {
    
    	//发件人姓名
    	private String developer;
    	//发件人方法
    	private String method;
    	//发件人url
    	private String url;
    	//发件人捕获异常信息
    	private Exception e;
    	
    	/**
    	 * @param developer 发件人姓名
    	 * @param method 发件人方法
    	 * @param url 发件人url
    	 * @param e 发件人捕获异常信息
    	 */
    	public ExceptionInfo(String developer, String method, String url, Exception e) {
    		super();
    		this.developer = developer;
    		this.method = method;
    		this.url = url;
    		this.e = e;
    	}
    	public String getDeveloper() {
    		return developer;
    	}
    	public void setDeveloper(String developer) {
    		this.developer = developer;
    	}
    	public String getMethod() {
    		return method;
    	}
    	public void setMethod(String method) {
    		this.method = method;
    	}
    	public String getUrl() {
    		return url;
    	}
    	public void setUrl(String url) {
    		this.url = url;
    	}
    	public Exception getE() {
    		return e;
    	}
    	public void setE(Exception e) {
    		this.e = e;
    	}
    	
    	
    }
    

    类MailSenderInfo:发送邮箱信息

    package mail;
    
    import java.util.Properties;
    /**
     * @class:MailSenderInfo 
     *@descript:发送邮箱信息
     *@date:2016年10月26日 下午8:14:22
     *@author sanghaiqin
     *@version:V1.0
     */
    public class MailSenderInfo {
    	//发送邮件的服务器的IP
    	private String mailServerHost;
    	//发送邮件的服务器的端口默认为25
        private String mailServerPort = "25";
        // 邮件发送者的地址
        private String fromAddress;
        // 邮件接收者的地址
        private String toAddress;
        // 登陆邮件发送服务器的用户名
        private String username;
        // 登陆邮件发送服务器的密码
        private String password;
        // 是否需要身份验证
        private boolean validate = false;
        // 邮件主题
        private String subject;
        // 邮件的文本内容
        private String content;
        // 邮件附件的文件名
        private String[] attachFileNames;
        
        public MailSenderInfo() {
    		super();
    	}
    
        public String getMailServerHost() {
            return mailServerHost;
        }
        public void setMailServerHost(String mailServerHost) {
            this.mailServerHost = mailServerHost;
        }
        public String getMailServerPort() {
            return mailServerPort;
        }
        public void setMailServerPort(String mailServerPort) {
            this.mailServerPort = mailServerPort;
        }
        public boolean isValidate() {
            return validate;
        }
        public void setValidate(boolean validate) {
            this.validate = validate;
        }
        public String[] getAttachFileNames() {
            return attachFileNames;
        }
        public void setAttachFileNames(String[] fileNames) {
            this.attachFileNames = fileNames;
        }
        public String getFromAddress() {
            return fromAddress;
        }
        public void setFromAddress(String fromAddress) {
            this.fromAddress = fromAddress;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public String getToAddress() {
            return toAddress;
        }
        public void setToAddress(String toAddress) {
            this.toAddress = toAddress;
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getSubject() {
            return subject;
        }
        public void setSubject(String subject) {
            this.subject = subject;
        }
        public String getContent() {
            return content;
        }
        public void setContent(String textContent) {
            this.content = textContent;
        }
        
        /**
         * @descript:获得邮件会话属性
         * @return
         */
        public Properties getProperties() {
        	PropertyUtil propertyUtil = new PropertyUtil();
    		Properties properties =propertyUtil.readProperties();
            return properties;
        }
    
        
        
    }
    

    类MyAuthenticator:用户验证

    package mail;
    
    import javax.mail.Authenticator;
    import javax.mail.PasswordAuthentication;
    /**
     * @class:MyAuthenticator 
     *@descript:用户验证
     *@date:2016年10月26日 下午8:57:45
     *@author sanghaiqin
     *@version:V1.0
     */
    public class MyAuthenticator extends Authenticator {
    	//用户名
    	String username = null;
    	//密码
        String password = null;
    
        public MyAuthenticator() {
        	
        }
    
        public MyAuthenticator(String username, String password) {
            this.username = username;
            this.password = password;
        }
    
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(username, password);
        }
        
    }
    

    类PropertyUtil:获得properties文件工具类

    package mail;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;
    /**
     * @class:PropertyUtil 
     *@descript:获得properties文件工具类
     *@date:2016年10月26日 下午8:20:10
     *@author sanghaiqin
     *@version:V1.0
     */
    public class PropertyUtil {
    	/**
    	 * @descript:加载资源文件
    	 * @param resources  资源文件
    	 * @return
    	 * @throws FileNotFoundException
    	 */
    	private Properties loadProperties(String resources) {
    		InputStream inputstream = null;
    		Properties properties = new Properties();
    		// 使用InputStream得到一个资源文件
    		try {
    			inputstream = new FileInputStream(resources);
    			 // 加载配置文件
    		     properties.load(inputstream);
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}finally{
    			if(inputstream!=null){
    				try {
    					inputstream.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    				} 
    		    }
    		}
    	   return properties;
    	}
    	
    	/**
    	 * @descript:读属性文件
    	 * @return
    	 * @throws FileNotFoundException
    	 */
    	public Properties readProperties(){
    		String resources = PropertyUtil.class.getClassLoader().getResource("prop.properties").getPath();
    		Properties properties = loadProperties(resources);
    		return properties;
    	}
    	
    	/**
    	 * @descript:测试
    	 * @param args
    	 */
    	public static void main(String[] args)  {
    		PropertyUtil p=new PropertyUtil();
    		Properties pro=p.readProperties();
    		String mailSenderUsername=(String) pro.get("mail.sender.username");
    		System.out.println("邮件发送者用户名:"+mailSenderUsername);//neo_lifes@163.com
    		String path = PropertyUtil.class.getClassLoader().getResource("prop.properties").getPath();
    		System.out.println(path);// /G:/Workspaces4.4/test/bin/prop.properties
    	}
    	
    }
    

    资源文件pro.properties:

    #-------------------邮件功能------------------
    #----------------这两个是构建session必须的字段----------
    #smtp服务器,构建session回话必须的字段
    mail.smtp.host=smtp.163.com
    #身份验证,构建session回话必须的字段
    mail.smtp.auth=true
    #--------------------------------------------------------------
    #发送者的邮箱用户名
    mail.sender.username=neo_lifes@163.com
    #发送者的邮箱密码
    mail.sender.password=827623LIU
    #发送者的邮箱地址
    mail.sender.address=neo_lifes@163.com

    类JavaMail:发送邮箱

    package mail;
    
    import java.io.PrintWriter;
    import java.io.StringWriter;
    import java.io.UnsupportedEncodingException;
    import java.net.InetAddress;
    import java.net.UnknownHostException;
    import java.util.Date;
    import java.util.Properties;
    
    import javax.activation.DataHandler;
    import javax.activation.DataSource;
    import javax.activation.FileDataSource;
    import javax.mail.Address;
    import javax.mail.BodyPart;
    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.Multipart;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeBodyPart;
    import javax.mail.internet.MimeMessage;
    import javax.mail.internet.MimeMultipart;
    import javax.mail.internet.MimeUtility;
    
    /**
     * @class:JavaMail 
     *@descript:发送信息邮箱
     *所需jar包:
     *fastjson-1.1.24.jar
     *javax.mail-1.5.6.jar
     *@date:2016年10月26日 下午8:13:05
     *@author sanghaiqin
     *@version:V1.0
     */
    public class JavaMail {
    	
    	public static void sendExceptionMail(ExceptionInfo info){
    		try {
    			//通过发送者获得发送者邮箱
    			String mail = Developer.getMail(info.getDeveloper());
    			if(mail!=null){
    				MailSenderInfo mailInfo = new MailSenderInfo();
    				//设置邮件的文本内容
    				mailInfo.setContent("负责人 : "+info.getDeveloper()+"==>服务器 ip:"+InetAddress.getLocalHost().getHostAddress()+"==>方法名: "+info.getMethod()+"==>地址:"+info.getUrl()+"==>异常信息: "+getEmessage(info.getE()));
    				//设置邮件接收者的地址
    				mailInfo.setToAddress(mail);
    				//邮件主题
    				mailInfo.setSubject("易卡爱途异常通知");
    				//发送邮件
    				sendTextMail(mailInfo);
    			}
    		} catch (UnknownHostException e) {
    			e.printStackTrace();
    		}
    	}
    	
    	/**
    	 * @descript:以文本格式发送邮件
    	 * @param: mailInfo  待发送的邮件的信息
    	 * @return: 发送成功返回true;失败返回false
    	 */
    	public static boolean sendTextMail(MailSenderInfo mailInfo) {
    		// 判断是否需要身份认证
    		MyAuthenticator authenticator = null;
    		Properties pro = mailInfo.getProperties();
    		try { 
    			if ("true".trim().equals(pro.getProperty("mail.smtp.auth"))) {
    				// 如果需要身份认证,则创建一个密码验证器
    				authenticator = new MyAuthenticator(pro.getProperty("mail.sender.username"),pro.getProperty("mail.sender.password"));
    			}
    			// 根据邮件会话属性和密码验证器构造一个发送邮件的session
    			Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
    			// 根据session创建一个邮件消息
    			Message mailMessage = new MimeMessage(sendMailSession);
    			// 创建邮件发送者地址
    			Address from = new InternetAddress(pro.getProperty("mail.sender.address"));
    			// 设置邮件消息的发送者
    			mailMessage.setFrom(from);
    			// 创建邮件的接收者地址,并设置到邮件消息中
    			Address to = new InternetAddress(mailInfo.getToAddress());
    			// Message.RecipientType.TO属性表示接收者的类型为TO
    			mailMessage.setRecipient(Message.RecipientType.TO, to);
    			// 设置邮件消息的主题
    			mailMessage.setSubject(mailInfo.getSubject());
    			// 设置邮件消息发送的时间
    			mailMessage.setSentDate(new Date());
    			// 设置邮件消息的主要内容
    			mailMessage.setText(mailInfo.getContent());
    			// 发送邮件
    			Transport.send(mailMessage);
    			return true;
    		} catch (MessagingException ex) {
    			ex.printStackTrace();
    		}
    		return false;
    	}
    
    	/**
    	 * @descript:以HTML格式发送邮件
    	 * @param mailInfo: 待发送的邮件的信息
    	 * @param attachment:附件内容
    	 * @return:发送成功返回true;失败返回false
    	 */
    	public static boolean sendHtmlMail(MailSenderInfo mailInfo, String[] attachment) {
    		// 判断是否需要身份认证
    		MyAuthenticator authenticator = null;
    		Properties pro = mailInfo.getProperties();
    		try {
    			// 如果需要身份认证,则创建一个密码验证器
    			if ("true".trim().equals(pro.getProperty("mail.smtp.auth"))) {
    				// 如果需要身份认证,则创建一个密码验证器
    				authenticator = new MyAuthenticator(pro.getProperty("mail.sender.username"),pro.getProperty("mail.sender.password"));
    			}
    			// 根据邮件会话属性和密码验证器构造一个发送邮件的session
    			Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
    			// 根据session创建一个邮件消息
    			Message mailMessage = new MimeMessage(sendMailSession);
    			// 创建邮件发送者地址
    			Address from = new InternetAddress(pro.getProperty("mail.sender.address"));
    			// 设置邮件消息的发送者
    			mailMessage.setFrom(from);
    			// 创建邮件的接收者地址,并设置到邮件消息中
    			Address to = new InternetAddress(mailInfo.getToAddress());
    			// Message.RecipientType.TO属性表示接收者的类型为TO
    			mailMessage.setRecipient(Message.RecipientType.TO, to);
    			// 设置邮件消息的主题
    			mailMessage.setSubject(mailInfo.getSubject());
    			// 设置邮件消息发送的时间
    			mailMessage.setSentDate(new Date());
    			// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
    			Multipart mainPart = new MimeMultipart();
    			// 创建一个包含HTML内容的MimeBodyPart
    			BodyPart html = new MimeBodyPart();
    			// 设置HTML内容
    			html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
    			//添加HTML内容的MimeBodyPart
    			mainPart.addBodyPart(html);
    			// 添加附件的内容
    			if (attachment != null) {
    				for (String filePath : attachment) {
    					MimeBodyPart filePart = new MimeBodyPart();
    					DataSource source = new FileDataSource(filePath);
    					filePart.setDataHandler(new DataHandler(source));
    					try {
    						// 网上流传的解决文件名乱码的方法,其实用MimeUtility.encodeWord就可以很方便的搞定
    						filePart.setFileName(MimeUtility.encodeWord(source.getName()));
    					} catch (UnsupportedEncodingException e) {
    						e.printStackTrace();
    					}
    					mainPart.addBodyPart(filePart);
    				}
    			}
    			// 将MiniMultipart对象设置为邮件内容
    			mailMessage.setContent(mainPart);
    			//保持内容
    			mailMessage.saveChanges();
    			// 发送邮件
    			Transport.send(mailMessage);
    			return true;
    		} catch (MessagingException ex) {
    			ex.printStackTrace();
    		}
    		return false;
    	}
    	
    	
    	/**
    	 * @descript:获得发送者方法的异常信息
    	 * 使用字符串作为物理节点的字符输入输出流的用法,即StringReader和StringWriter的用法 
    	 * PrintWriter(Writer out, boolean autoFlush)  创建带自动行刷新的新 PrintWriter, true代表能自动刷新
    	 * @param e 异常信息
    	 * @return
    	 */
    	private static String getEmessage(Exception e){   
    		//StringWriter输出异常信息
            StringWriter sw = new StringWriter();   
            PrintWriter pw = new PrintWriter(sw, true);   
            e.printStackTrace(pw);   
            pw.flush();   
            sw.flush();   
            return sw.toString();   
    	} 
    	
    	/**
    	 * @descript:测试
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		//测试1:发送邮件以文本格式
    		try {
    			String s="";
    			s.substring(2);
    		} catch (Exception e) {
    			e.printStackTrace();
    			System.out.println(getEmessage(e));
    			sendExceptionMail(new ExceptionInfo( Developer.sanghaiqin.getName(),"get()", "123",e));
    		}
                   //或者如下测试:
                  MsgReceiver receiver=new MsgReceiver();
            String mail="1522580013@qq.com";
            String title="您已成功分享文件";
            String content = "未来的你,一定会感谢今天努力的你";
            receiver.sendMailText(mail,title,content);
            System.out.println("发送成功");
    
                //测试2:发送邮件以html格式
    	    MailSenderInfo mailInfo = new MailSenderInfo();
    	    mailInfo.setToAddress("1522580013@qq.com");             // 设置接受者邮箱地址
    	    mailInfo.setSubject("标题"); 
    	    mailInfo.setContent("内容<h1>www.baidu.com</h1>");
    	    String[] files = {"G:/upload/image/2016/10/28/1477372845440.jpg","G:/upload/image/2016/10/28/1477372845660.jpg"};
                JavaMail.sendHtmlMail(mailInfo,files); // 发送html格式
                System.out.println("发送成功");
           
           
    	}
    	
    }
    

    测试截图:

    测试1:发送邮件以文本格式:


    测试2:发送邮件以html格式:



    项目结构截图:



    展开全文
  • Java邮件发送

    2014-12-25 09:40:46
    26. * 获得邮件会话属性 27. */ 28. public Properties getProperties(){ 29. Properties p = new Properties(); 30. p.put("mail.smtp.host", this.mailServerHost); 31. p.put("mail.smtp.port", this....
  • 影响邮件打开率的因素甚多,不仅包括了是否吸睛的标题、个性化的内容、清晰的排版等,另外,邮件发送时间点也是极其重要的。那么,何时发送邮件才能让收件人更容易看到呢?为此,Webpower中国区结合了GetResponse...

    随着国内邮件营销的关注热度逐渐升温,市场营销人员开始把注意力投射到邮件发送的各个细节中。影响邮件打开率的因素甚多,不仅包括了是否吸睛的标题、个性化的内容、清晰的排版等,另外,邮件发送时间点也是极其重要的。那么,何时发送邮件才能让收件人更容易看到呢?为此,Webpower中国区结合了GetResponse关于邮件发送时间的一项数据调查展开论述,分析邮件发送的黄金时间点。

    无论对于短信、邮件类的传统营销渠道或是诸如微信等新媒体营销渠道,人们的阅读欲望往往存在于接收信息后一段较短的时间内。根据数据显示,23.63%的邮件会在发送后1小时内被收件人打开,2小时内的打开率呈现则骤降到9.52%,3小时后打开数据再下降30%,为6.33%。邮件打开率随着进入收件箱时长的递增而呈现出大幅减少的现象,24小时后的打开率趋近于0%。那么,何时发送邮件才能被更多的用户看到呢?

    误区:任何时间都适合发送邮件

    虽说邮件在抵达用户收件箱后1小时内有较高的打开反馈,但事实上并不是任何时间都适合商家推送邮件。我们应当避免踩到时间地雷,切忌在下班高峰时间进行邮件推广。调查显示出,下午5点后人们通常忙于自身的日常生活:堵车、晚餐、照顾孩子、社交等活动。在这段时间内,人们无暇腾出时间查收邮件,故而导致早先的邮件被湮没和遗忘,几小时后的打开几率基本少于5%。

    营销人员应该知道的邮件发送黄金时间段

    然而,人们发送邮件与查看邮件的高峰时间截然不同。究竟商家发送邮件的黄金时间是什么时候呢?根据上图数据揭示,38.7%的人在早上6点至中午12点之间发送邮件,此时间段的发送量占据最高比例,其次是傍晚6点至凌晨12点的29.6%;而邮件打开率的最高呈现时间段则为中午12点至傍晚6点,为10.61%;上午时间段的打开率表现则为7.05%。另外,最高点击率和打开率的时间点分别集中在上班前和下午茶时间。对此,我们可以从中得到结论:邮件最高发送率≠邮件最佳打开率,两者中间存在很大差异性,上午8-9点以及下午3-4点都是商家进行邮件营销活动的黄金时间段,用户更愿意在该时间段内阅读邮件,在一定层面增加了商家销售产品的概率。此外,营销人员还必须注意各个国家地区的时差问题,避免造成邮件发送时间的错误估算。

    Webpower中国区全服务团队小结:选择合适的邮件发送时间是商家获得较高投资回报率(ROI)的重要因素之一。除了参考本文所总结的要点外,商家还应考虑自身行业特性以及会员的具体数据反馈进行发送优化,最终实现邮件营销项目的成功。

    展开全文
  • Dns解析出的ip不通导致无法发送邮件 问题:搬入公司新址,使用一运营商的专线网络后(原来使用电信宽带),经常有同事反馈有时无法发送邮件,有时能成功。今天有同事反馈无法发邮件,但他的账号在别人pc使用上是...

     

    Dns解析出的ip不通导致无法发送邮件

      问题:搬入公司新址,使用一运营商的专线网络后(原来使用电信宽带),经常有同事反馈有时无法发送邮件,有时能成功。今天有同事反馈无法发邮件,但他的账号在别人pc使用上是正常的,收发没有问题。Web页面模式登录邮箱,收发正常。

      排查过程

        在自己的pc上测试发送邮件,并抓包。观察现象正常。公司使用263的邮件服务器,抓包显示如下:

    接收过程:

    过滤smtp | |tcp.port==995 || dns contains  “公司域名”后如下显示:

    发送过程:

    tcp.port==25  ||  dns  contains  "公司域名“  后显示如下:

    可以收发,让同事检查自己配置是否有错。有事先走了,下午问他,反馈重新安装foxmail还是没法发,安装另一款邮件程序还是发不了。

    在自己的机子上测试,发现也发不了,连接错误,奇怪,抓包观察?

     

    奇怪,为什么没有发smtp协议消息消息呢?过滤tcp的端口25,看这个端口有触发没有?

    过滤tcp.port==25

    发现没有握手通过,这个ip地址211.150.65.66从哪里来的?跟踪上面的包。

    Dns的resonse消息里有这个ip地址。

    根据dns的发送id找到本机发出的dns 的query查询邮件发送服务器域名消息,想起foxmail里的服务器里对应域名设置。

     

    根据抓包发现,这里设置的域名,发送邮件时会主动去查询。

    在dos下去ping这个地址,发现ping不通。

    由此,判断是dns给的这个地址不通导致发送邮件失败。

    Ping域名发现,dns给的ip地址不通。

    但有一次ping通了,获取的ip是58.215.117.69,ping这个ip是可达的。

     

    抓包发现dns到一个能够成功的ip,ping通了。直接ping这个ip如下图。

    于是把stmp服务器这里的域名改成这个ip地址,试发一下。

    抓包查看消息

    发送成功,消息显示没有dns的过程,直接连接这个ip地址进入鉴权认证过程,发送过程,问题解决。

    结论:

    1. Foxmail工作过程,服务器设置为域名情况下,先查询域名对应的ip地址,然后通过tcp协议连接目标ip995端口,三次握手,建立tcp连接,连上上后,使用pop3协议进行收取文件。tcp连接目标ip的25端口,三步握手建立tcp连接,连接成功后,使用smtp协议进行发送邮件。
    2. Dns查询接收发送服务器域名的过程和tcp连接收发邮件是两个过程,dns成功了,但tcp连接失败会收发失败。
    3. 相同的pc,每次dns获取到同一url地址有可能是不同的,如下图:

     

    当获得无法tcp连接成功的ip时,会导致邮件发送失败。

    不同的pc获取同一url地址也可能不同,获得可达ip地址的,发送邮件成功,反之,发送失败。

    同时,每个dns获取到的url地址的ip都有一定的生存时间,当缓存中存在此对应关系时,不会再次查询,直到缓存失效。

    1. Wireshark里可用contains双引号字符串来查询协议层里包含的字符串,方便查询对应的包。如图:

     

    1. Foxmail里的pop3服务器和smtp服务器设置成ip,收发邮件时不进行dns查询过程,速度更快一些。
    2. Ping 域名的过程其实就是dns缓存里没有的情况下,先去dns的query过程,得到响应response后,再去向目标ip发出icmp的request消息。

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 登录网页版邮箱 发送测试邮件 126邮箱已成功接收 通过exchange服务器追踪邮件 总结 需求 有时候,在公司内部,出于某些特殊原因。我们对某用户的收发邮件记录进行追踪。 登录邮箱服务器管理工具 启动路径...
    展开全文
  • 邮件发送项目

    千次阅读 2017-02-10 14:47:01
    发送邮件功能包action package action;import java.io.File; import java.util.Properties;import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; ...
  • java实现读取邮件发送邮件

    千次阅读 2016-02-18 11:16:40
    有些邮箱pop服务器不支持查看是否邮件已经被查看多的功能,只能通过自己认为添加标识标记邮件是已读还是未读 public class MailUtil { /**   * 判断邮件中是否包含附件   * @param msg 邮件内容   ...
  • 以下是对邮件发送失败 提示信息的解析: 1、提示信息:There are no DNS entries for the hostname, I cannot determine where to send this message. 退信原因:检索不到接收方域名的邮件解析(MX记录)和 2、提示...
  • Java 实现QQ邮件发送过程

    千次阅读 2016-11-21 11:14:04
    一:首先要了解邮件发送的一些基本概念: 1.1、邮件服务器和电子邮箱  要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器。例如现在Internet很多提供邮件服务的厂商:sina、sohu、163等等他们都有自己...
  • java邮件发送通用类

    2016-03-16 16:06:56
    java邮件发送通用写法 支持txt和html邮箱基本信息public class MailSenderInfo { // 发送邮件的服务器的IP和端口 private String mailServerHost;... // 邮件发送者的地址 private String fromAddr
  • 用Spring的邮件封装类JavaMailSenderImpl发送邮件

    万次阅读 热门讨论 2016-03-31 18:04:09
    JavaMailSenderImpl是spring封装的邮件发送封装类,支持普通文本、附件、html。博主今天用到了用qq邮箱发送普通文本,以后若用到了其他,再补充在下面。 用qq邮箱的smtp邮件服务器,前提之一是关闭登录保护,开启...
  • 一般是这样的,我们可能不会要求马上发送这封邮件,为了减少服务器压力和带宽压力,我们一般是在空闲时在发送,或者用户指定时间发送 那么就要先把邮件进行保存,然后按时发送 可以将信息保存到数据库,然后获取...
  • 邮件发送小结

    千次阅读 2016-08-03 11:43:16
    邮件实体(发送邮件需要使用的基本信息)类: import java.util.Properties; /** * 发送邮件需要使用的基本信息 * * @author quezuogang * */ public class MailSenderInfo { // 发送邮件的服务器的...
  • javaMail发送邮件

    2015-01-26 09:36:48
    第一个类:MailSenderInfo.java  ...* 发送邮件需要使用的基本信息 */ import java.util.Properties; public class MailSenderInfo { // 发送邮件的服务器的IP和端口 private Stri...
  • 使用JavaMail API发送邮件,大概分为三个类:MyAuthenticator---密码认证器,MailSendInfo--邮件发送消息集合,MailSendUtils--邮件发送消息注入执行 MyAuthenticator import javax.mail.Authenticator; import...
  • JavaMail发送邮件

    千次阅读 2015-01-05 09:26:27
    通过java实现邮件发送
  • 实现邮件发送代码

    2018-02-12 17:52:22
    邮件发送代码书写1.导包mail.jar2.书写代码package com.itcast.mail; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; import...
  • python定时邮件发送

    千次阅读 2013-04-26 10:26:12
    邮件发送--试用一个邮箱定时给另一个邮箱发送邮件--程序启动后,本地时间为整点时自动使用"zw772686607@163.com"邮箱向 "772686607@qq.com"邮箱发送"d://log.txt"文件 若不添加附件发送也可运行 #代码如下 #!...
  • asp教程.net三种发送邮件代码(stmp,无组件邮件发送) public bool sendmails() { smtpclient _smtpclient = new smtpclient(); _smtpclient.deliverymethod = smtpdeliverymethod.network;//指定电子邮件...
  • java发送邮件

    千次阅读 2017-02-20 18:11:24
    JAVA邮件发送的大致过程是这样的的: 1、构建一个继承自javax.mail.Authenticator的具体类,并重写里面的getPasswordAuthentication()方法。此类是用作登录校验的,以确保你对该邮箱有发送邮件的权利。 2、构建一个...
  • Java Web JavaMail 邮件发送

    千次阅读 2013-08-04 09:41:03
    广泛的,很多时候,我们都需要邮件发送和接收的功能。  如我们开发的一个网络书店,当用户下了订单之后,我们都会把订单信息发送到用户的邮箱当中 这是就可以使用JavaMail技术了。  下载JavaMail:  ...
  • 一、使用javamail发送普通文本邮件 发送电子邮件 主要步骤如下: 1,获取系统Properties. Properties props = System.getProperties(); 2,将您的SMTP服务器名添加到mail.smtp.host关键字的属性中. Props.pout( ...
  • 搭建百万级别邮件发送平台

    千次阅读 2017-06-28 13:46:24
    但是这个简单的百万级别邮件发送平台(EDM)耗费了我3个多月的时间。 EDM(Email Direct Marketing)主要用于较大量的营销和推广类邮件发送。我搭建的EDM平台主要用于给订阅用户发送推广类邮件和通知类邮件。
  • Android邮件发送实现

    万次阅读 热门讨论 2018-07-27 17:06:48
    这里邮件的实现方式使用的是 JavaMail for Andorid,用到的包主要有android-mail和android-activation,具体详情可以参考:https://javaee.github.io/javamail/#JavaMail_for_Android,这里使用的Android studio进行...
  • qq邮箱 实现邮件发送

    千次阅读 2018-11-06 16:52:00
    使用java实现邮件发送 传送文字 当前时间 以及图片 首先建个maven web项目 第一步 qq邮箱需要设置服务 进入邮箱 点击设置 往下面 滑动找到服务 如图 开启第一个pop3服务 这个授权码先保存 第二步 导入邮件发送的...
  • Java邮件发送详解(可发送附件)

    万次阅读 2016-11-24 23:12:53
    发送前需要引用mail-1.4.5.jar,资源下载参见下载链接。 一、邮件内容实体类package mail;import java.security.GeneralSecurityException; import java.util.Properties;import ...
  • Android 发送邮件以及定时发送邮件的实现  本文以腾讯企业邮箱为例,展示如何发送邮件 及相关问题 选择腾讯企业邮箱是因为腾讯企业邮箱一般都是开启了smtp服务    项目地址:...
  • Email邮件头(邮件发送原理、INTERNET邮件头)揭密 转自 http://hi.baidu.com/xuehengwu/item/276b798b8c0f7652e63d19bd 一、简介 本文将详细讨论email头的方方面面。主要为用户架设邮件服务器提供理论...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 148,677
精华内容 59,470
关键字:

得到邮件发送时间