一位同事告诉我,使用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()
}
}
我得到这个例外:
javax。邮政AuthenticationFailedException:535-5.7.8不接受用户名和密码。在535 5.7.8了解更多信息https://support.google.com/mail/?p=BadCredentialsn6sm4681584wmn。48-gsmtp
没有OAuth是不可能的。我尝试用google object 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();
响应返回以下url:https://developers.google.com/identity/protocols/AuthForInstalledApps
重要提示:自2012年4月20日以来,ClientLogin已被正式弃用,现在不再可用。对ClientLogin的请求将失败,并出现HTTP 404响应。我们鼓励您尽快迁移到OAuth 2.0。
然后,如果您想使用java basic和gmail作为提供程序发送邮件,您可以输入以下代码:
首先是所有的图书馆:
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
然后,您放置一个示例类:
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();
}
}
}
如果程序抛出:
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)
这意味着您需要创建应用程序密码: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...
}
}
编辑:
问题“不接受用户名和密码”,您可以通过以下方式修复它:
https://support.google.com/mail/answer/7126229?visit_id=636925989304024248-4140438018
实际上,它不适合gmail api。这是JMS的基本邮件服务器配置。这是我在Spring所做的;
配置文件:
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
Maven依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
使用JavaMailSenderJava代码:
@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);
}
}
资料来源:https://www.baeldung.com/spring-email
注意:如果您计划尝试此应用程序,请确保电子邮件帐户允许不太安全的应用程序(不太安全的应用程序访问)。以下是您可以更改的链接:https://myaccount.google.com/lesssecureapps
编辑:我正在添加基本邮件发件人项目的公共版本-https://github.com/ercinakcay/mailsender-public
我正在尝试在Jenkins中配置电子邮件通知。但它显示了以下错误。。。在此处输入图像描述 我用管理员帐号试过了,然后用我自己的gmil帐号试过了 错误:: 发送电子邮件失败 javax.mail.身份验证失败异常: 535-5.7.8用户名和密码不接受。在535 5.7.8了解更多https://support.google.com/mail/?p=BadCredentialsx11sm87366
下面是错误和超时异常。 输入代码: 调试SMTP:正在尝试连接到主机“SMTP.gmail.com”,端口587,isSSL true Exceptioninthread“main”java。lang.RuntimeException:com。太阳邮政util。MailConnectException:无法连接到主机,端口:smtp。gmail。com,587;超时-1。
我已经在Flitter中构建了一个应用程序,并使用firebase电子邮件密码验证方法进行用户登录。我只是想知道我们是否可以在firebase中查看用户的密码。如果无法查看我们应用程序的用户密码,那么这可能是不公平的,因为我们是应用程序的所有者,我们自己也不知道我们应用程序用户的密码。例如,facebook应用程序所有者(扎克伯格)可能知道用户的密码,或者instagram应用程序所有者可能知道用
我在ASP. Net Core中工作,并尝试从gmail使用smtp客户端发送电子邮件。有以下代码,但不起作用也看过以下帖子,但不起作用http://dotnetthoughts.net/how-to-send-emails-from-aspnet-core/ 它会跟踪错误 系统NotSupportedException:SMTP服务器不支持身份验证
我在使用我的公司交换服务器通过Javamail发送电子邮件时遇到了一些问题。我们有一个应用程序通过gmail服务器发送电子邮件没有任何问题,但对于Google策略的一些更改,我们希望使用公司服务器来完成这项工作。我确信会话属性中的问题,但我无法找到使其工作的方法 这是显示日志的错误 javax.mail.MessagingException:无法连接到SMTP主机:mail.company.com
当我尝试使用我的GMail帐户从我的PHP应用程序中使用SwiftMailer发送电子邮件时,出现以下错误。 这是我的SwiftMailer代码: 这是Apache错误日志和堆栈跟踪中的条目。 [Wed Aug18 22:06:10.284728 2015][: error][pid 9298][客户端10.0.0.1:64806]PHP致命错误:未捕获异常'Swift_TransportExce