我目前正在使用 Bouncy Castle,我意识到每当我添加安全提供商时,都不会发送电子邮件。我不明白为什么添加 Bouncy Castle 会阻止电子邮件发送。
import java.math.BigInteger;
import java.security.InvalidKeyException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.SignatureException;
import java.security.cert.X509Certificate;
import java.util.Date;
import org.bouncycastle.asn1.x509.X509Name;
import org.bouncycastle.x509.X509V1CertificateGenerator;
@SuppressWarnings("deprecation")
public class RootCertificateAuthority {
public KeyPair pair;
String issuer = "CN=TRN";
public X509Certificate rootcert;
public RootCertificateAuthority(){
generateRSAKeyPair();
generateV1Certificate();
}
public KeyPair generateRSAKeyPair() {
KeyPairGenerator kpGen;
try {
kpGen = KeyPairGenerator.getInstance("RSA");
kpGen.initialize(1024);
return kpGen.generateKeyPair();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@SuppressWarnings("deprecation")
public void generateV1Certificate() {
// Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
this.pair = generateRSAKeyPair();
// Security.provider.7=org.bouncycastle.jce.provider.BouncyCastleProvider;
X509V1CertificateGenerator certGen = new X509V1CertificateGenerator();
certGen.setSerialNumber(BigInteger.valueOf(System.currentTimeMillis()));
certGen.setIssuerDN(new X509Name( issuer));
certGen.setNotBefore(new Date(System.currentTimeMillis()));
certGen.setNotAfter(new Date(System.currentTimeMillis() + (1000L * 60 * 60 * 24 * 100)));
certGen.setSubjectDN(new X509Name( issuer));
certGen.setPublicKey(pair.getPublic());
certGen.setSignatureAlgorithm("SHA256WithRSAEncryption");
try {
rootcert= certGen.generateX509Certificate(pair.getPrivate(),"BC");
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SignatureException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchProviderException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
}
//This class is used to send mail
import java.io.IOException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.Security;
import java.security.cert.CertificateException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
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 PleaseEmail {
RootCertificateAuthority CertificateAuthority;
List<String> userslist;
KeyStore keystore;
public PleaseEmail(){
userslist = new ArrayList<String>();
CertificateAuthority = new RootCertificateAuthority();
try {
keystore= KeyStore.getInstance(KeyStore.getDefaultType());
java.io.FileInputStream fis = null;
fis = new java.io.FileInputStream("U:/mykeystore.jks");
keystore.load(fis, "password".toCharArray());
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (CertificateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (KeyStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void sendMail(){
Properties props = new Properties( );
props.put("mail.host","smtp.gmail.com");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
Session mailConnection =
Session.getInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("XXX@GMAIL.COM","password");
}
});
try {
MimeMessage message = new MimeMessage(mailConnection);
message.setFrom(new InternetAddress("opd@gmail.com"));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse("xxx@gmail.com"));
message.setSubject("Testing Subject");
message.setText("Dear Mail Crawler," +
"\n\n No spam to my email, please!");
Transport.send(message);
} catch (AddressException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Security.addProvider(
new org.bouncycastle.jce.provider.BouncyCastleProvider());
PleaseEmail a = new PleaseEmail();
a.sendMail();
}
}