我正在创建一个程序,将信息发送到我的电子邮件,我正在从给定的Java代码中获取参考。但我收到身份验证失败错误。任何人都有想法发送SMTP邮件,而不允许从Gmail和雅虎安全性较低?请帮帮我。
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
import java.util.*;
import java.io.*;
public class Emailer
{
private static final String SMTP_HOST_NAME = "smtp.live.com";
private static final String SMTP_AUTH_USER = "mokee@live.com";
private static final String SMTP_AUTH_PWD = "spidermonkey";
private static final String emailMsgTxt = "Online Order Confirmation Message. Also include the Tracking Number.";
private static final String emailSubjectTxt = "HELEEEELEQWEWEQ!!!";
private static final String emailFromAddress = "mokee@live.com";
// Add List of Email address to who email needs to be sent to
private static final String[] emailList = {"mokee@live.com"};
public static void main(String emailBody) throws Exception
{
Emailer smtpMailSender = new Emailer();
smtpMailSender.postMail( emailList, emailSubjectTxt, emailBody, emailFromAddress);
System.out.println("Sucessfully Sent mail to All Users");
}
public void postMail( String recipients[ ], String subject, String message , String from) throws MessagingException {
boolean debug = false;
//Set the host smtp address
Properties props = new Properties();
props.put("mail.smtp.host", SMTP_HOST_NAME);
props.put("mail.smtp.auth", "true");
Authenticator auth = new SMTPAuthenticator();
Session session = Session.getDefaultInstance(props, auth);
session.setDebug(debug);
// create a message
Message msg = new MimeMessage(session);
// set the from and to address
InternetAddress addressFrom = new InternetAddress(from);
msg.setFrom(addressFrom);
InternetAddress[] addressTo = new InternetAddress[recipients.length];
for (int i = 0; i < recipients.length; i++)
{
addressTo[i] = new InternetAddress(recipients[i]);
}
msg.setRecipients(Message.RecipientType.TO, addressTo);
// Setting the Subject and Content Type
msg.setSubject(subject);
msg.setContent(message, "text/plain");
Transport.send(msg);
}
/**
* SimpleAuthenticator is used to do simple authentication
* when the SMTP server requires it.
*/
private class SMTPAuthenticator extends javax.mail.Authenticator
{
private Session createSmtpSession() {
final Properties props = new Properties();
props.setProperty("mail.smtp.host", "smtp.live.com");
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.port", "" + 587);
props.setProperty("mail.smtp.starttls.enable", "true");
// props.setProperty("mail.debug", "true");
return Session.getDefaultInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("mokee@live.com", "spidermonkey");
}
});
}
}
}
但是,无论何时运行此命令,我都会收到以下错误消息:
Exception in thread "main" javax.mail.AuthenticationFailedException: failed to connect, no password specified?
at javax.mail.Service.connect(Service.java:329)
at javax.mail.Service.connect(Service.java:176)
at javax.mail.Service.connect(Service.java:125)
at javax.mail.Transport.send0(Transport.java:194)
at javax.mail.Transport.send(Transport.java:124)
at client.Emailer.postMail(Emailer.java:102)
at client.Emailer.main(Emailer.java:67)
at client.RemoteFileClient.main(RemoteFileClient.java:28)
答案 0 :(得分:1)
您已创建
public void postMail( String recipients[ ], String subject, String message , String from)
throws MessagingException {
Session session = null;
Properties props = new Properties();
props.setProperty("mail.smtp.host", SMTP_HOST_NAME );
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.port", "" + 587);
props.setProperty("mail.smtp.starttls.enable", "true");
// props.setProperty("mail.debug", "true");
session = Session.getInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(SMTP_AUTH_USER,SMTP_AUTH_PWD);
}
});
session.setDebug(debug);
// create a message
Message msg = new MimeMessage(session);
// set the from and to address
InternetAddress addressFrom = new InternetAddress(from);
msg.setFrom(addressFrom);
InternetAddress[] addressTo = new InternetAddress[recipients.length];
for (int i = 0; i < recipients.length; i++)
{
addressTo[i] = new InternetAddress(recipients[i]);
}
msg.setRecipients(Message.RecipientType.TO, addressTo);
// Setting the Subject and Content Type
msg.setSubject(subject);
msg.setContent(message, "text/plain");
Transport.send(msg);
}
但你没有使用它。
这是您的解决方案。
$x = array(1 => 'test1', 2 => 'test', 3 => 'test3', 4 => 'test4');
$y = array(1,4);
print_r(array_diff_key($x, $y));