DP_*_*DP_ 8 java email gmail gmail-api
一位同事告诉我,使用Gmail API库,您可以使用用户名和密码从公司Gmail帐户发送电子邮件。
到目前为止,我还无法确定如何准确地使用用户名和密码(没有访问令牌,没有秘密)来构建Gmail实例。
可以使用GMail API仅使用用户名和密码发送电子邮件吗?如果是这样,我在哪里可以找到示例?
更新1:当我使用以下代码时
@Test
fun sendMail() {
val credentials = Properties()
credentials.load(FileInputStream("src/test/resources/credentials.properties"))
val username = credentials.getProperty("username")
val password = credentials.getProperty("password")
val prop = Properties()
prop.put("mail.smtp.host", "smtp.gmail.com")
prop.put("mail.smtp.port", "587")
prop.put("mail.smtp.auth", "true")
prop.put("mail.smtp.starttls.enable", "true") //TLS
val session = Session.getInstance(prop,
object : javax.mail.Authenticator() {
override fun getPasswordAuthentication(): PasswordAuthentication {
return PasswordAuthentication(username, password)
}
})
try {
val message = MimeMessage(session)
message.setFrom(InternetAddress("..."))
message.setRecipients(
Message.RecipientType.TO,
InternetAddress.parse("...")
)
message.setSubject("Testing Gmail")
message.setText("Hello!!")
Transport.send(message)
println("Done")
} catch (e: MessagingException) {
e.printStackTrace()
}
}
Run Code Online (Sandbox Code Playgroud)
我得到这个例外:
javax.mail.AuthenticationFailedException:535-5.7.8不接受用户名和密码。要了解更多信息,请访问535 5.7.8 https://support.google.com/mail/?p=BadCredentials n6sm4681584wmn.48-gsmtp
实际上,它与gmail API无关。这是JMS的基本邮件服务器配置。这是我春天时所做的。
配置文件:
spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=[GMAIL_USERNAME]
spring.mail.password=[GMAIL_PASSWORD]
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.protocol=smtp
Run Code Online (Sandbox Code Playgroud)
Maven的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
使用JavaMailSender的Java代码:
@Component
public class EmailService
{
@Autowired
protected JavaMailSender emailSender;
public void sendRegistrationMail(RegistrationForm form) {
SimpleMailMessage message = new SimpleMailMessage();
message.setTo(form.getUserMail());
message.setSubject("-- COOL SUBJECT --");
message.setText("- COOL TEXT -");
emailSender.send(message);
}
}
Run Code Online (Sandbox Code Playgroud)
来源:https : //www.baeldung.com/spring-email
注意:请确保如果您正在计划,请尝试使用此应用程序,该电子邮件帐户允许安全性较低的应用程序(安全性较低的应用程序访问权限)。这是您可以更改的链接:https : //myaccount.google.com/lesssecureapps
编辑:我正在添加基本mailsender项目的公共版本-https: //github.com/ercinakcay/mailsender-public
没有OAuth,是不可能的。我试图以ClientLogin这种方式使用google对象api gmail登录:
HttpTransport transport = new NetHttpTransport();
ClientLogin authenticator = new ClientLogin();
authenticator.transport = transport;
authenticator.authTokenType = "mail";
authenticator.username = "user";
authenticator.password = "password";
final ClientLogin.Response response = authenticator.authenticate();
Run Code Online (Sandbox Code Playgroud)
并且响应返回以下网址:https : //developers.google.com/identity/protocols/AuthForInstalledApps
重要提示:自2012年4月20日起,ClientLogin已正式弃用,现在不再可用。对ClientLogin的请求将失败,并显示HTTP 404响应。我们建议您尽快迁移到OAuth 2.0。
然后,如果要发送带有gmail作为提供者的java basic的邮件,则可以输入以下代码:
首先是库:
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
然后放一个示例类:
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class TestMail {
public static void main(String[] args) {
final String username = "username@gmail.com";
final String password = "password";
Properties prop = new Properties();
prop.put("mail.smtp.host", "smtp.gmail.com");
prop.put("mail.smtp.port", "587");
prop.put("mail.smtp.auth", "true");
prop.put("mail.smtp.starttls.enable", "true"); //TLS
Session session = Session.getInstance(prop,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("from@gmail.com"));
message.setRecipients(
Message.RecipientType.TO,
InternetAddress.parse("contact1@gmail.com, contact2@yahoo.com")
);
message.setSubject("Testing Gmail");
message.setText("Hello!!");
Transport.send(message);
System.out.println("Done");
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果程序抛出:
Caused by: javax.mail.AuthenticationFailedException: 534-5.7.9 Application-specific password required. Learn more at
534 5.7.9 https://support.google.com/mail/?p=InvalidSecondFactor - gsmtp
at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:965)
at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:876)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:780)
at javax.mail.Service.connect(Service.java:388)
at javax.mail.Service.connect(Service.java:246)
at javax.mail.Service.connect(Service.java:195)
at javax.mail.Transport.send0(Transport.java:254)
at javax.mail.Transport.send(Transport.java:124)
at com.mkyong.calculator.SendEmail.main(SendEmail.java:41)
Run Code Online (Sandbox Code Playgroud)
这意味着您需要创建一个应用程序密码:https : //support.google.com/accounts/answer/185833?p=InvalidSecondFactor
然后,使用应用程序生成的密码,将该密码而不是其他密码放入代码中:
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
public class TestMail {
public static void main(String[] args) {
final String username = "username@gmail.com";
final String password = "puts your app password here"; // update here
// same code...
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
问题“不接受用户名和密码”,您可以通过以下方法解决问题:
| 归档时间: |
|
| 查看次数: |
792 次 |
| 最近记录: |