请问如何实现javaMail发送邮件不需要发送者账号和口令的办法。 是不是与smtp服务器设置有关!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 贴一个我做流程时邮件通知得代码,试过了挺好用的//´øÑéÖ¤µÄ·¢ËÍÓʼþ·½·¨ public void sendEmail(String smtpServer,String fromUser,String fromPassword ,String fromEmail,String toUserEmail,String subject,String comment) throws UnsupportedEncodingException, MessagingException{ Properties props=new Properties(); props.put("mail.smtp.auth","true"); props.put("mail.host",smtpServer); props.put("mail.smtp.user", fromUser); props.put("mail.smtp.password", fromPassword); Session session=Session.getDefaultInstance(props,null); Message msg=new MimeMessage(session); msg.setFrom(new InternetAddress(fromEmail,fromUser)); msg.setRecipient(Message.RecipientType.TO,new InternetAddress(toUserEmail)); msg.setSubject(subject); msg.setSentDate(new Date()); msg.setText(comment); Transport transport = session.getTransport("smtp"); transport.connect((String)props.get("mail.smtp.host"), props.getProperty("mail.smtp.user"), props.getProperty("mail.smtp.password")); transport.sendMessage(msg,msg.getAllRecipients()); } 这个不是和你的程序相关的,是和服务器设置相关的,如果服务器端设置了发邮件必须login,那么你想匿名,或者不写pwd都是不行的 你可是直接声请一个163.com的邮箱就作为发送邮件来使用,把这个声请的邮箱的用户名和密码写在代码中,通过au.check("用户名","密码")方法来通过验证,给你一段代码试试,这是我用来将告警信息发送到指定用户的信箱里.Properties props = new Properties();SendMailAuthenticator au = new SendMailAuthenticator();au.check("用户名", "密码"); // 认证 props.put("mail.smtp.host", "smtp.126.com"); // 设置smtp服务器props.put("mail.smtp.auth", "true"); // 这样认证才会起作用:)Session session = Session.getInstance(props, au);// 创建sessionMimeMessage message = new MimeMessage(session); //创建message对象//先来写“信封”吧try { Address address = new InternetAddress("*****@126.com", "发件人姓名"); //发件人地址 Address toAddress = new InternetAddress(*****@163.com);//收件人地址 message.setFrom(address);//设置发件人 message.setRecipient(MimeMessage.RecipientType.TO, toAddress);//设置收件人 //下面写邮件内容 message.setSubject("测试邮件", "GB2312"); //设置主题 message.setSentDate(new Date());//设置日期 message.setText("凡在我心目中占有一定地位的人都将获得我有我免费提供测试邮件一封!!呵呵…^_^," +"发生告警的设备id是:"+id, "GB2312");//设置邮件内容//发送啦 Transport transport = session.getTransport("smtp"); Transport.send(message); }catch(Exception ex){ ex.printStackTrace();} 还是不可以,我实验了验证用户名称必须和(From)发送邮件人是同一人才可以发送,我用的是smtp.163.com,提示错误:javax.mail.MessagingException: 553 You are not authorized to send mail as <MAIL FROM:<[email protected]>>, authentication is required我用的用户名称是令一个邮箱名称。感谢: freestorm119(皮皮鲁) 兄,你的SendMailAuthenticator类没有写,我在网上找到了,补充一下。import javax.mail.Authenticator;import javax.mail.PasswordAuthentication;public class SendMailAuthenticator extends Authenticator{ private String username = ""; private String password = ""; public void check(String username, String password){ this.username = username; this.password = password; } public PasswordAuthentication getPasswordAuthentication(){ return new PasswordAuthentication(username,password); } }方法还是很好用的,但是不成功!应该是象 eureka0891() 兄说的那样。感谢帮助。 不过你有没有考虑过怎么能让发送的时候作一个控制,就是当产生告警信息后我采用发email的方法通知相关的人员,可是相同的告警会不停的产生,而又不能一直不停的给用户发信,不然邮箱那里能受的了啊,怎么能让相同的告警信息不重复的发送给相同的用户啊,只是想给点思路,谢谢 http://www.javayou.com/showlog.jspe?log_id=502 这个不是和你的程序相关的,是和服务器设置相关的,如果服务器端设置了发邮件必须login,那么你想匿名,或者不写pwd都是不行的----------------------------------是这样的! filter的执行顺序到底是咋走的?? 怎么用js获取动态输出的验证码的的值啊? 获得 webRoot 下的路径 quartz持久化问题 csv 编码utf-8格式 读取 第一个字符出错,不知道为何多了两个字节 appfuse 乱码的解决之道? 大牛过来看看,程序哪里有问题? jsp文本框修改后的值传到ArrayList 如何取当前的url ?? 别嫌我烦,我真的怕了jsp了 有个论坛发布主题完成后的跳转的问题~~~ jxl 如何设置页边距!
//´øÑéÖ¤µÄ·¢ËÍÓʼþ·½·¨
public void sendEmail(String smtpServer,String fromUser,String fromPassword
,String fromEmail,String toUserEmail,String subject,String comment) throws UnsupportedEncodingException, MessagingException{
Properties props=new Properties();
props.put("mail.smtp.auth","true");
props.put("mail.host",smtpServer);
props.put("mail.smtp.user", fromUser);
props.put("mail.smtp.password", fromPassword); Session session=Session.getDefaultInstance(props,null);
Message msg=new MimeMessage(session);
msg.setFrom(new InternetAddress(fromEmail,fromUser));
msg.setRecipient(Message.RecipientType.TO,new InternetAddress(toUserEmail));
msg.setSubject(subject);
msg.setSentDate(new Date());
msg.setText(comment);
Transport transport = session.getTransport("smtp");
transport.connect((String)props.get("mail.smtp.host"),
props.getProperty("mail.smtp.user"),
props.getProperty("mail.smtp.password"));
transport.sendMessage(msg,msg.getAllRecipients());
}
如果服务器端设置了发邮件必须login,那么你想匿名,或者不写pwd都是不行的
Properties props = new Properties();SendMailAuthenticator au = new SendMailAuthenticator();
au.check("用户名", "密码"); // 认证
props.put("mail.smtp.host", "smtp.126.com"); // 设置smtp服务器
props.put("mail.smtp.auth", "true"); // 这样认证才会起作用:)
Session session = Session.getInstance(props, au);// 创建sessionMimeMessage message = new MimeMessage(session); //创建message对象
//先来写“信封”吧
try {
Address address = new InternetAddress("*****@126.com", "发件人姓名"); //发件人地址
Address toAddress = new InternetAddress(*****@163.com);//收件人地址
message.setFrom(address);//设置发件人
message.setRecipient(MimeMessage.RecipientType.TO, toAddress);//设置收件人 //下面写邮件内容
message.setSubject("测试邮件", "GB2312"); //设置主题
message.setSentDate(new Date());//设置日期
message.setText("凡在我心目中占有一定地位的人都将获得我有我免费提供测试邮件一封!!呵呵…^_^," +"发生告警的设备id是:"+id, "GB2312");//设置邮件内容//发送啦
Transport transport = session.getTransport("smtp");
Transport.send(message); }catch(Exception ex){
ex.printStackTrace();
}
javax.mail.MessagingException: 553 You are not authorized to send mail as <MAIL FROM:<[email protected]>>, authentication is required
我用的用户名称是令一个邮箱名称。感谢: freestorm119(皮皮鲁) 兄,你的SendMailAuthenticator类没有写,我在网上找到了,
补充一下。import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;public class SendMailAuthenticator extends Authenticator
{
private String username = "";
private String password = ""; public void check(String username, String password){
this.username = username;
this.password = password;
} public PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication(username,password);
}
}
方法还是很好用的,但是不成功!
应该是象 eureka0891() 兄说的那样。
感谢帮助。
如果服务器端设置了发邮件必须login,那么你想匿名,或者不写pwd都是不行的
----------------------------------是这样的!