请教:Java发邮件在windows下面可以,在Linux上面发不了 请教:Java发邮件在windows下面测试成功,上传到服务器(Linux)上面就没有反应了,看了下log,也没有报什么错希望有过类此经验的朋友指点一二谢谢!~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 理论上说不应该有问题,会不会是lz的运行环境不一样导致的?比如linux上缺某个jar包什么的,毕竟发mail的api不是标准库good luck 把javamail的debug级别日志打开,就很详细了没有明显性的错误的话很有可能是dns的问题linux下域名解析一般不太保险尤其是企业级只跑应用的主机不如把发邮件的目标主机从域名改为ip试试 我记得我在unix服务器上做上传下载时也遇到这种情况,也是什么错都没报,不知道对楼主有没有用。我那次是因为正斜线与反斜线的问题,因为windows环境下是可以识别反斜线的而unix不可以,所以重新改写一下就好了。楼主的功能内有用到斜线吗? 您的意思是 Java发mail的jar包 在 windows 和 Linux上是不同的么? 应该是一样的,是用mail.jar这个类开发的吗?现在我所做的工程是在windows上开发,在unix上运营的。没有问题~! 什么环境?tomcat的?OR jdk的? 看一下有没有\和/windows和linux不一样的,是不是这个问题造成的? 现在我把发邮件的这个Java类贴出来 希望各位帮我看看 谢谢import javax.mail.Address;import javax.mail.Message;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.AddressException;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;public class SendEmail { public boolean SendEmailTest(String ToEmailStr, String Title, String Content, String FromEmaila) throws AddressException { // ToEmailStr收件人地址 // Title邮件标题 // Content邮件内容 // FromEmail发件人地址 String FromEmail = "[email protected]"; boolean fnt = false; Properties props = new Properties(); Session sendMailSession; Transport transport; sendMailSession = Session.getInstance(props, null); String smtp = "smtp.gmail.com";//google邮箱 props.put("mail.smtp.localhost", "117.102.19.68"); props.put("mail.smtp.host", smtp); // "202.106.187.180"//是“smtp.sohu.com”的IP! props.put("mail.smtp.port", "465"); props.put("mail.smtp.auth", "true"); // 允许smtp校验 if(smtp.indexOf("smtp.gmail.com")>=0){ props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.setProperty("mail.smtp.socketFactory.fallback", "false"); props.setProperty("mail.smtp.port", "465"); props.setProperty("mail.smtp.socketFactory.port", "465"); } try { transport = sendMailSession.getTransport("smtp"); transport.connect("smtp.gmail.com", "*****", "******"); // 你的用户名,密码........... Message newMessage = new MimeMessage(sendMailSession); // 设置mail主题 String mail_subject = Title; newMessage.setSubject(mail_subject); // 设置发信人地址 Address address[] = { new InternetAddress(FromEmail) };// 改变发件人地址 newMessage.addFrom(address); // 设置收件人地址 newMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(ToEmailStr)); // 设置mail正文 newMessage.setSentDate(new java.util.Date()); String mail_text = Content; newMessage.setText(mail_text); newMessage.saveChanges(); // 保存发送信息 transport.sendMessage(newMessage, newMessage.getRecipients(Message.RecipientType.TO)); // 发送邮件 fnt = true; transport.close(); } catch (Exception e) { e.printStackTrace(); fnt = false; } return fnt; }} 我来告诉你,楼上其实也有人提过。你这个问题十有八九是因为Linux的域名服务没有启动命令如下:service named start最后把这个服务设成开机自启动服务(自己写脚本),这样就不用每次开机手动启动了。 在那里执行这个命令啊?是在root下面吗?报错了:named: unrecognized service liunx比较折腾。最好别弄那玩艺。真正正规的公司,程序员根本不用去设置liunx。有专人早就设定好以及进行维护。程序员只需要写好自己的程序即可,发布,部署都是服务器管理人员的事情。 哈哈 你可是说出了我的心声,可是没办法,根本就没有管理人员去部署,老郁闷了,好几个在Windows上面测试正常的程序到Linux上就出毛病... 我给你的命令应该没有问题,一般是在root下执行的。不过可能是我们的linux版本不一致,命令会有区别,不过这个应该不会不同,也很有可能是你的linux版本没有预装域名服务(现在新的版本都会预装的,除非你的linux发行版很古董,或者装的不是服务器版本的)。我的linux版本是Centos5。你可以在网上百度或谷歌一下linux域名服务的安装和配置启动方法。还有一个折中的解决办法就是把你程序里用到域名的地方都改成ip地址 telnet 下看端口通不 如果程序没异常 端口也通的话 那就是网管和防火墙的可能了 spring3偶发session值被同名request参数替换 struts2 freemarker 生成的静态页面如何保持到项目中 Jconsole.exe 中文版 jforum论坛二次开发--显示版主 请高手帮忙啊?急!!! 关于struts中html标签与jsp变量的问题 如果socket不断,TCP/IP在应用层永远不会丢包/丢数据吗? 我需要一个用struts架构模式开发的样例网站,本人高分求购! ^_^一个关于DataSource数据源的问题 我想关闭这个窗口 。该怎么写退出代码 commons-fileupload如何限制上传速度? 关于schema校验
会不会是lz的运行环境不一样导致的?
比如linux上缺某个jar包什么的,
毕竟发mail的api不是标准库good luck
没有明显性的错误的话
很有可能是dns的问题
linux下域名解析一般不太保险
尤其是企业级只跑应用的主机
不如把发邮件的目标主机从域名改为ip试试
您的意思是 Java发mail的jar包 在 windows 和 Linux上是不同的么?
现在我所做的工程是在windows上开发,在unix上运营的。没有问题~!
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;public class SendEmail {
public boolean SendEmailTest(String ToEmailStr, String Title,
String Content, String FromEmaila) throws AddressException {
// ToEmailStr收件人地址
// Title邮件标题
// Content邮件内容
// FromEmail发件人地址
String FromEmail = "[email protected]";
boolean fnt = false;
Properties props = new Properties();
Session sendMailSession;
Transport transport;
sendMailSession = Session.getInstance(props, null);
String smtp = "smtp.gmail.com";//google邮箱
props.put("mail.smtp.localhost", "117.102.19.68");
props.put("mail.smtp.host", smtp); // "202.106.187.180"//是“smtp.sohu.com”的IP!
props.put("mail.smtp.port", "465");
props.put("mail.smtp.auth", "true"); // 允许smtp校验
if(smtp.indexOf("smtp.gmail.com")>=0){
props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.port", "465");
props.setProperty("mail.smtp.socketFactory.port", "465");
} try {
transport = sendMailSession.getTransport("smtp");
transport.connect("smtp.gmail.com", "*****", "******"); // 你的用户名,密码...........
Message newMessage = new MimeMessage(sendMailSession); // 设置mail主题
String mail_subject = Title;
newMessage.setSubject(mail_subject); // 设置发信人地址
Address address[] = { new InternetAddress(FromEmail) };// 改变发件人地址
newMessage.addFrom(address);
// 设置收件人地址
newMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(ToEmailStr)); // 设置mail正文
newMessage.setSentDate(new java.util.Date());
String mail_text = Content;
newMessage.setText(mail_text); newMessage.saveChanges(); // 保存发送信息
transport.sendMessage(newMessage, newMessage.getRecipients(Message.RecipientType.TO)); // 发送邮件
fnt = true;
transport.close();
} catch (Exception e) {
e.printStackTrace();
fnt = false;
}
return fnt;
}
}
你这个问题十有八九是因为Linux的域名服务没有启动
命令如下:service named start
最后把这个服务设成开机自启动服务(自己写脚本),这样就不用每次开机手动启动了。
报错了:named: unrecognized service
去部署,老郁闷了,好几个在Windows上面测试正常的程序到Linux上就出毛病...
我的linux版本是Centos5。你可以在网上百度或谷歌一下linux域名服务的安装和配置启动方法。还有一个折中的解决办法就是把你程序里用到域名的地方都改成ip地址
如果程序没异常 端口也通的话 那就是网管和防火墙的可能了