Java Runtime.exec()不从命令行发送电子邮件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java Runtime.exec()不从命令行发送电子邮件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2121字,纯文字阅读大概需要4分钟。
内容图文
![Java Runtime.exec()不从命令行发送电子邮件](/upload/InfoBanner/zyjiaocheng/756/20e5371c7a3f4f49acc7bd5969b195a2.jpg)
我正在创建一个java应用程序,我想添加的一个功能是将生成的电子邮件发送给用户.我在Macbook上设置了邮件,我可以从命令行发送电子邮件.我在调用runtime.exec()时发送电子邮件时遇到问题.任何人都知道为什么它不会执行和发送电子邮件?
Runtime runtime = Runtime.getRuntime();
try {
runtime.exec("echo This is the body | mail -s Subject -F myemail@gmail.com");
}
catch ( Exception e ) {
// TODO Auto-generated catch block
e.printStackTrace();
}
我没有得到任何错误,一切都编译得很好.我只是没有收到任何电子邮件.如果有人能够帮助,将非常感谢谢谢.
解决方法:
Runtime.exec(String)不会通过将其粘贴到UNIX shell并运行它来执行整个字符串.这是因为它是一个巨大的安全漏洞.
想象一下你这样做了:
runtime.exec("Hello "+name+" | mail ...");
然后我可以设置名称; rm -rf / *;回声或&& cat / etc / passwd,或其他一些shell注入代码.
所以,Java is breaking up your command into parts:
More precisely, the command string is broken into tokens using a StringTokenizer created by the call new StringTokenizer(command) with no further modification of the character categories. The tokens produced by the tokenizer are then placed in the new string array cmdarray, in the same order.
最终,您将单独运行echo命令,其参数如|和邮件. echo命令只会将这些输出打印到您不收集的标准输出.它永远不会调用mail命令.
由于涉及安全风险,您不应使用mail命令从Java发送邮件.您应该使用JavaMail包,它提供了一个安全方便的API来发送邮件. UNIX mail命令通过连接到端口25上本地计算机上运行的sendmail守护程序来工作,JavaMail也可以这样做.
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
public class SendMail {
public static sendMail(String from, String to, String subject, String body)
throws MessagingException
{
final Properties p = new Properties();
p.put("mail.smtp.host", "localhost");
final Message msg = new MimeMessage(Session.getDefaultInstance(p));
msg.setFrom(new InternetAddress(from));
msg.addRecipient(RecipientType.TO, new InternetAddress(to));
msg.setSubject(subject);
msg.setText(body);
Transport.send(msg);
}
}
内容总结
以上是互联网集市为您收集整理的Java Runtime.exec()不从命令行发送电子邮件全部内容,希望文章能够帮你解决Java Runtime.exec()不从命令行发送电子邮件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。