邮件和短信的发送

本文介绍了一个实用的Java工具类,用于实现短信和电子邮件的发送功能。该工具类通过POST和GET方式发送短信,并利用JavaMail API发送邮件。文章详细展示了如何配置短信服务器信息、加密短信内容以及设置邮件发送的相关属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.mes.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.MimeMessage;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.mes.payplus.util.weixin.MD5Util;
import com.sun.mail.smtp.SMTPAddressFailedException;


public class SendEmailUtil {
public final static String proxy_url="proxy.zte.com.cn";//代理url
public final static String proxy_port="80";//代理端口
private static String email_user;
private static String email_password;
private static String email_host;
private static String email_from;

static{
Properties pro = new Properties();
String classPath =SendEmailUtil.class.getClassLoader().getResource("").getPath();
String filePath = classPath + "email.properties";
try {
InputStream inStream = new FileInputStream(new File(filePath));
pro.load(inStream);
} catch (IOException e) {
e.printStackTrace();
}
email_user = pro.getProperty("email_user");
email_password = pro.getProperty("email_password");
email_host=pro.getProperty("email_host");
email_from=pro.getProperty("email_from");
}
/**
* 字符串数组转化成List
* @param strs
* @return
*/
public static ArrayList<String> transList(String[] strs){
ArrayList<String> list=new ArrayList<String>();
if(strs.length!=0){
for(int i=0;i<strs.length;i++){
list.add(strs[i]);
}
}
return list;
}

//发短信 Post方法没有调通 显示必填参数有些没填 但是看接口说明是完全填了的,,,班车管家
public static boolean sendSmsPost(String content,String phoneNum) throws Exception {
boolean flag=false;
URL url = new URL("http://www.jc-chn.cn/smsSend.do?");
// 设置请求参数
String psd1=MD5Util.MD5Encode("qx7q61pf", null);//47x88ytq
String psd2=MD5Util.MD5Encode("zxyh01"+psd1,null);
StringBuffer sb = new StringBuffer();
sb.append("username=zxyh01");
sb.append("&password="+psd2);
sb.append("&mobile="+phoneNum);//多个电话号码用,分开
sb.append("&content=" + URLEncoder.encode(content, "utf-8"));
sb.append("&dstime=");
// 通用的请求属性
//配置代理 方便本地
URLConnection conn = url.openConnection();
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setDoOutput(true);
conn.setDoInput(true);
// 获取connection对象的输出流
PrintWriter out = new PrintWriter(conn.getOutputStream());
// 发送请求参数
out.print(sb.toString());
// 定义flush输出流的缓冲
out.flush();

// 定义bufferedReader输入流读取URL响应
BufferedReader in = new BufferedReader(new InputStreamReader(
url.openStream()));
String line = "";
String result = "";
while ((line = in.readLine()) != null) {
result += line + "\n";
}
out.close();
in.close();
System.out.println(result);
return flag;
}
//发短信 GeT方法调通 可以使用
public static boolean sendSmsGet(String content,String phoneNum) throws IOException {
boolean flag=false;
//从配置中读取短信相关信息
String[] strs =changePhoneUser();
//把需要的读取出来
String uri=strs[0];
String user_name=strs[1];
String password=strs[2];
StringBuffer sb = new StringBuffer(uri+"?");
sb.append("username="+user_name);
//第一次加密
String psd1=MD5Util.MD5Encode(password, null);
//第二次加密
String psd2=MD5Util.MD5Encode(user_name+psd1,null);
sb.append("&password="+psd2);
sb.append("&mobile="+phoneNum);
sb.append("&plaintext=乐享生活");

sb.append("&content="+URLEncoder.encode(content,"utf-8"));
sb.append("&dstime=");
URL url = new URL(sb.toString());
//配置代理 方便本地测试
URLConnection conn = null;
String proxy_set = "false";
if (proxy_set!=null && proxy_set.equals("true"))
{
//HttpProxy proxy = new HttpProxy("proxy.zte.com.cn",80);
System.setProperty("http.proxyHost", proxy_url);
System.setProperty("http.proxyPort", proxy_port);
conn = url.openConnection();
//conn.connect();
}
else
{
conn = url.openConnection();
}

conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.connect();
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
String line = "";
String result = "";
while ((line=in.readLine())!=null){
result += line + "\n";
}
in.close();
System.out.println("短信发送返回值:"+result);
if((!result.contains("-"))&&(!"0".equals(result))){
flag=true;
}
return flag;
}
/**
* 从配置文件中读取 短信服务器信息
* 动态改变短信服务器 名字 密码 修改位置 email_info.properties
*/
public static String[] changePhoneUser(){
//Prop prop=new Prop("config/email_info.properties");
/* String user ="zxyh04";
String password="4k0ggxjy";*/
String user ="zxyh01";
String password="qx7q61pf";
String url="http://www.jc-chn.cn/smsSend.do";
String[] strs={url,user,password};
return strs;
}

/**
* 发邮件
*/
public static boolean sendEmail(String toEmail, String context, String subject,
HttpServletRequest request, HttpServletResponse response) {
boolean flag=false;
Properties props = new Properties();
Authenticator auth = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(email_user,email_password);
}
};
props.put("mail.smtp.host", email_host);
props.put("mail.smtp.auth", "true");
props.put("mail.from", email_from);
props.put("mail.smtp.reportsuccess", true);
Session session = Session.getInstance(props, auth);
session.setDebug(false);
StringBuffer sb = new StringBuffer();
try {
MimeMessage msg = new MimeMessage(session);
msg.setFrom();
msg.setRecipients(Message.RecipientType.TO, toEmail);
msg.setSubject(subject);
msg.setSentDate(new Date());
msg.setText(context);
Transport.send(msg);
flag=true;
} catch (SMTPAddressFailedException ex) {
// 250是发送OK的 捕获到250 Mail OK
// 550 User not found: 461503821@163.com 550错误 只能获取到Invalid
// Addresses没有发现这个邮箱
int message=ex.getReturnCode();
if(message==250){
flag=true;
}
System.out.println("SMTPAddressFailedException---------------------------"+ ex.getReturnCode());
System.out.println("SMTPAddressFailedException---------------------------"+ ex.getMessage());
sb.append("SMTPAddressFailedException---------------------------"+ ex.getMessage() + "\t");
} catch (MessagingException mex) {
String message=mex.getMessage();
if(message.contains("250")){
flag=true;
}
System.out.println("MessagingException------" + mex.getMessage());
sb.append("MessagingException------" + mex.getMessage());
} catch (Exception e) {
e.getMessage();
}
return flag;
}

public static void main(String[] args) {

}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值