smtp邮件发送 |
java |
http://www.codefans.net/articles/209.shtml |
package com.povodo.cloud.modules.test;
/**
* 有ssl错误要加上 props.put("mail.smtp.starttls.enable", "true");
* Created by lucky god on 6/12/29.
*/
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Properties;
public class Mail {
private MimeMessage mimeMsg;
private Session session;
private Properties props;
private String username;
private String password;
private Multipart mp;
public Mail(String smtp) {
setSmtpHost(smtp);
createMimeMessage();
}
public void setSmtpHost(String hostName) {
System.out.println("设置系统属性:mail.smtp.host=" + hostName);
if (props == null) {
props = System.getProperties();
}
props.put("mail.smtp.host", hostName);
}
public boolean createMimeMessage() {
try {
System.out.println("准备获取邮件会话对象!");
session = Session.getDefaultInstance(props, null);
} catch (Exception e) {
System.out.println("获取邮件会话错误!" + e);
return false;
}
System.out.println("准备创建MIME邮件对象!");
try {
mimeMsg = new MimeMessage(session);
mp = new MimeMultipart();
return true;
} catch (Exception e) {
System.out.println("创建MIME邮件对象失败!" + e);
return false;
}
}
/*定义SMTP是否需要验证*/
public void setNeedAuth(boolean need) {
System.out.println("设置smtp身份认证:mail.smtp.auth = " + need);
if (props == null)
props = System.getProperties();
if (need) {
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
} else {
props.put("mail.smtp.auth", "false");
}
}
public void setNamePass(String name, String pass) {
username = name;
password = pass;
}
/*定义邮件主题*/
public boolean setSubject(String mailSubject) {
System.out.println("定义邮件主题!");
try {
mimeMsg.setSubject(mailSubject);
return true;
} catch (Exception e) {
System.err.println("定义邮件主题发生错误!");
return false;
}
}
/*定义邮件正文*/
public boolean setBody(String mailBody) {
try {
BodyPart bp = new MimeBodyPart();
bp.setContent("" + mailBody, "text/html;charset=GBK");
mp.addBodyPart(bp);
return true;
} catch (Exception e) {
System.err.println("定义邮件正文时发生错误!" + e);
return false;
}
}
/*设置发信人*/
public boolean setFrom(String from) {
System.out.println("设置发信人!");
try {
mimeMsg.setFrom(new InternetAddress(from)); //发信人
return true;
} catch (Exception e) {
return false;
}
}
/*定义收信人*/
public boolean setTo(String to) {
if (to == null)
return false;
System.out.println("定义收信人!");
try {
mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
return true;
} catch (Exception e) {
return false;
}
}
/*定义抄送人*/
public boolean setCopyTo(String copyto) {
if (copyto == null)
return false;
try {
mimeMsg.setRecipients(Message.RecipientType.CC, (Address[]) InternetAddress
.parse(copyto));
return true;
} catch (Exception e) {
return false;
}
}
/*发送邮件模块*/
public boolean sendOut() {
try {
mimeMsg.setContent(mp);
mimeMsg.saveChanges();
System.out.println("邮件发送中....");
Session mailSession = Session.getInstance(props, null);
Transport transport = mailSession.getTransport("smtp");
transport.connect((String) props.get("mail.smtp.host"), username, password);
transport.sendMessage(mimeMsg, mimeMsg
.getRecipients(Message.RecipientType.TO));
System.out.println("发送成功!");
transport.close();
return true;
} catch (Exception e) {
System.err.println("邮件失败!" + e);
return false;
}
}
/*调用sendOut方法完成发送*/
public static boolean sendAndCc(String smtp, String from, String to, String copyto,
String subject, String content, String username, String password) {
Mail theMail = new Mail(smtp);
theMail.setNeedAuth(true); // 验证
if (!theMail.setSubject(subject))
return false;
if (!theMail.setBody(content))
return false;
if (!theMail.setTo(to))
return false;
if (!theMail.setCopyTo(copyto))
return false;
if (!theMail.setFrom(from))
return false;
theMail.setNamePass(username, password);
if (!theMail.sendOut())
return false;
return true;
}
public static void main(String[] args) {
String smtp = "smtp.qq.com";// smtp服务器
String from = "785080472@qq.com";// 邮件显示名称
String to = "1101155715@qq.com";// 收件人的邮件地址,必须是真实地址
String copyto = "";// 抄送人邮件地址
String subject = "测试邮件";// 邮件标题
String content = "你好!";// 邮件内容
String username = "785080472";// 发件人真实的账户名
String password = "cmpqtgdrzcgsbfae";// 发件人密码,qq需要授权码
Mail.sendAndCc(smtp, from, to, copyto, subject, content, username, password);
}
}
|
JSTL字符串连接 |
jstl |
|
${not empty user.wxName ? '('.concat(user.wxName).concat(')'):''}
|
linux ntfs-3g支持 |
ntfs |
http://www.tuxera.com/community/open-source-ntfs-3g/ |
安装依赖:
yum -y install gcc*
下载支持包:
wget https://tuxera.com/opensource/ntfs-3g_ntfsprogs-2016.2.22.tgz
安装:
tar -zxvf 〈文件名〉
之后,进入目录,执行
./configure
make
make install
make clean
|
javascript中文从ArrayBuffer存入取出 |
javascript, arraybuffer |
http://zhidao.baidu.com/question/1048518532467599699 |
function char2buf(str){
var out = new ArrayBuffer(str.length*2);
var u16a= new Uint16Array(out);
var strs = str.split("");
for(var i =0 ; i<strs.length;i++){
u16a[i]=strs[i].charCodeAt(0);
}
return out;
}
function buf2char(buf){
var out="";
var u16a = new Uint16Array(buf);
var single ;
for(var i=0 ; i < u16a.length;i++){
single = u16a[i].toString(16);
while(single.length<4) single = "0".concat(single);
out+="\\u"+single;
}
return eval("'"+out+ "'");
}
|
mysql按in函数匹配的顺序排序 |
mysql |
http://blog.csdn.net/wwwyuanliang10000/article/details/37660545 |
sql: select * from table where id IN (3,6,9,1,2,5,8,7) order by field(id,3,6,9,1,2,5,8,7);
|
JS 弹出框接收用户输入数据 |
js |
http://yuncode.net/code/c_50bb52cbe9f921 |
var port = window.prompt("请输入新的监听端口号","");
|
jquery validate自定义验证规则 |
验证, jquery |
http://www.runoob.com/try/tryit.php?filename=jquery-plugin-custom-methods |
绑定到输入框中是与input的name对应
|
jquery.validate自定义验证 |
html, validate |
http://wwwzhouhui.iteye.com/blog/1068451 |
function addValidate(){
jQuery.validator.addMethod("mobile", function(value, element) {
var length = value.length;
var mobile = /^1[3|5|8]\d{9}$/;
return mobile.exec(value);
}, "请正确填写手机号码");
}
|
页面显示HTML标签内容,超出后省略显示 |
html, 标签内容, 省略显示 |
http://blog.csdn.net/dannywj1371/article/details/8127778 |
style样式为:
.overflow-text{max-width:250px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;}
HTML:
<xmp class='overflow-text' title="<IpmsNotification type="CheckOut">
<RoomNo>306</RoomNo>
<RoomTypeName>缤纷电脑房</RoomTypeName>
<RoomBuildingName>峰景主楼</RoomBuildingName>
<RoomBuildingCode>1</RoomBuildingCode>
<RoomFloorName>三楼</RoomFloorName>
<RoomFloorCode>3</RoomFloorCode>
<CheckInTime>2015-08-21 17:57:13</CheckInTime>
<CheckOutTime>2015-08-22 10:35:24</CheckOutTime>
<CheckOutRoom>true</CheckOutRoom>
<GuestInfo>
<Id>P1508211757104009577LSGQ</Id>
<GuestName>房贷首付</GuestName>
<IDCardNo/>
<IDCardTypeId>40</IDCardTypeId>
<Nationality/>
<Gender>0</Gender>
<Salutation>先生</Salutation>
<Birthday/>
<Address/>
<CityCode>100000</CityCode>
<ProvinceCode>geo.cn.bj</ProvinceCode>
<CountryCode>geo.cn</CountryCode>
<VisaNo/>
<VisaTypeId/>
<VisaValid/>
</GuestInfo>
</IpmsNotification>"><IpmsNotification type="CheckOut">
<RoomNo>306</RoomNo>
<RoomTypeName>缤纷电脑房</RoomTypeName>
<RoomBuildingName>峰景主楼</RoomBuildingName>
<RoomBuildingCode>1</RoomBuildingCode>
<RoomFloorName>三楼</RoomFloorName>
<RoomFloorCode>3</RoomFloorCode>
<CheckInTime>2015-08-21 17:57:13</CheckInTime>
<CheckOutTime>2015-08-22 10:35:24</CheckOutTime>
<CheckOutRoom>true</CheckOutRoom>
<GuestInfo>
<Id>P1508211757104009577LSGQ</Id>
<GuestName>房贷首付</GuestName>
<IDCardNo/>
<IDCardTypeId>40</IDCardTypeId>
<Nationality/>
<Gender>0</Gender>
<Salutation>先生</Salutation>
<Birthday/>
<Address/>
<CityCode>100000</CityCode>
<ProvinceCode>geo.cn.bj</ProvinceCode>
<CountryCode>geo.cn</CountryCode>
<VisaNo/>
<VisaTypeId/>
<VisaValid/>
</GuestInfo>
</IpmsNotification></xmp>
|
二维数组按列循环与按行循环区别 |
java, 算法 |
|
import java.util.Date;
public class ForTest {
public int[][] getArray(int row, int column){
int a[][] = new int[row][column];
for(int i = 0;i < row;i++){
for(int j = 0;j < column;j++){
a[i][j] = i*j;
}
}
return a;
}
public int computeInRow(int [][] a){
int count = 0;
for(int i = 0;i < a.length;i++){
for(int j = 0;j < a[i].length;j++){
count += a[i][j];
}
}
return count;
}
public int computeInColumn(int [][] a){
int count = 0;
for(int j = 0;j < a[0].length;j++){
for(int i = 0;i < a.length;i++){
count += a[i][j];
}
}
return count;
}
public static void main(String[] args) {
ForTest test = new ForTest();
int [][] a = test.getArray(1000, 5000);
System.out.println("开始计算...");
long beginTime = new Date().getTime();
int count = test.computeInRow(a);
long endTime = new Date().getTime();
System.out.println("按行获取数据计算结果为:"+count+",用时:"+(endTime-beginTime)+"ms");
beginTime = new Date().getTime();
count = test.computeInColumn(a);
endTime = new Date().getTime();
System.out.println("按列获取数据计算结果为:"+count+",用时:"+(endTime-beginTime)+"ms");
System.out.println("计算结束...");
}
// 以上2段代码差别只有for循环的顺序,但是局部性却相差了很多。我们知道数组在内存中是按照行的顺序来存储的。
// 但是computeInColumn确实按列去访问,这可能就导致缓存不命中(需要的数据并不在Cache中,因为Cache存储的是连续的内存数据,
// 而computeInColumn访问的是不联系的),也就降低了程序运行的速度。
}
|
获取本机的ip地址 |
ip地址 |
|
String ipaddress = InetAddress.getLocalHost().getHostAddress();
还有一种
StringBuilder IFCONFIG=new StringBuilder();
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress() && !inetAddress.isLinkLocalAddress() && inetAddress.isSiteLocalAddress()) {
IFCONFIG.append(inetAddress.getHostAddress().toString()+",");
}
}
}
} catch (SocketException ex) {
}
renderHtml(IFCONFIG.toString());
|
让标签文字溢出自动换行 |
html |
http://bbs.csdn.net/topics/380250090 |
word-break:break-word;
|
保留两位小数 |
小数点保留 |
http://blog.csdn.net/wamlko/article/details/24641187 |
var area = parseFloat(0.0061*height+0.0124*weight-0.0099);
$("#area").val(area.toFixed(2));
|
dos导出mysql数据库 |
mysql, 导出 |
如何时将远程服务器MYSQL数据库导出,导入 |
CD D:\Program Files\MySQL\MySQL Server 5.0\bin> 切换到mysql安装目录的bin下
mysqldump -h[hosname] -u[user_name] -p[password] --default-character-set=[char_set_name] [db_name] > [save_path]
例:然后输入:mysqldump -h119.12.12.11 -umysqluser -pmysqlpwd --default-character-set=utf8 dbname --skip-lock-tables> d:\sqlname.sql
119.12.12.11为远程服务器IP,-umysqluser mysqluser为数据库用户名,-pmysqlpwd mysqlpwd 为用户密码,set=utf8为导出MYSQL的编码格式,dbname为要导出的数据库名,>d:\sqlname.sql 为导入到你本地的存放路径,aspchina_net.sql你可以自由命名!
|
java WEB下载文件 中文文件名乱码处理 |
java, 中文文件名, 乱码 |
java web应用文件下载(包括中文文件名乱码处理) |
fileName = java.net.URLEncoder.encode(fileName,"UTF-8");
if(fileName.length()>150)//解决IE 6.0 bug
fileName=new String(fileName.getBytes("GBK"),"ISO-8859-1");
resp.setHeader("Content-Disposition", "attachment;filename=" + fileName);
response.addHeader("Content-Length", "" + file.length());
response.setContentType("application/octet-stream");
|
用EL表达式获取jsp的url参数 |
el表达式, jsp, url参数 |
请问el表达式不能取出url中的参数value值吗? |
<input type="hidden" name="branchId" value="${param.branchId}"/>
|