お世話になっております。
今回、processingを使用して、変数の一つの数字を集計するためにメールで数字を自身に送る事を目的としております。
その過程で、「How to send an email via Processing?」を参考にテストを行ってみましたが、以下のエラーが出て、送信が出来ておりません。
authenticating... javax.mail.MessagingException: Could not convert socket to TLS; nested exception is: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:2140) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:738) 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 save_attachment.sendMail(save_attachment.java:119) at save_attachment.setup(save_attachment.java:51) at processing.core.PApplet.handleDraw(PApplet.java:2414) at processing.awt.PSurfaceAWT$12.callDraw(PSurfaceAWT.java:1547) at processing.core.PSurfaceNone$AnimationThread.run(PSurfaceNone.java:316) Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1949) at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302) at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296) at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1514) at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216) at sun.security.ssl.Handshaker.processLoop(Handshaker.java:1026) at sun.security.ssl.Handshaker.process_record(Handshaker.java:961) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387) at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:619) at com.sun.mail.util.SocketFetcher.startTLS(SocketFetcher.java:546) at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:2135) ... 11 more Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:387) at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292) at sun.security.validator.Validator.validate(Validator.java:260) at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324) at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:229) at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124) at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1496) ... 21 more Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141) at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126) at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:382) ... 27 more Finished
フォーラム上のソースに対して行った処理は以下の内容です。
- javax.mailのダウンロード。
- 上記のファイルをProcessingのツールバー内[スケッチ]>[ファイルの追加]から読み込む。
- 「Auth」タブ内の15行、16行「someone@example.com」および「myPassword」を送り先のアドレスとパスワードに書き換え。
- 「MailStuff」タブ内の29行、30行「someone@example.com」及び「recipient@example.com」を送り先アドレスに変更。
使用していますアカウントはGmailでして、二段階認証はなく、低セキュアのアプリのアクセスは許可しています。
上記の方法は画像を送信する物のようですが、出来れば上がれば次にテキストのみの送信テストを行いたいと考えておりますが、「この方法よりもっと簡単な方法がある」などのご意見もふまえた上で、ご知恵をお借りできればと思います。
宜しくお願いいたします。
追記
ご指摘のあった「MailStuffタブ」のソースを追記します。
// Example functions that send mail (smtp) // You can also do imap, but that's not included here // A function to check a mail account import java.util.*; import java.io.*; import javax.activation.*; // A function to send mail void sendMail() { // Create a session String host="smtp.gmail.com"; Properties props=new Properties(); // SMTP Session props.put("mail.transport.protocol", "smtp"); props.put("mail.smtp.host", host); props.put("mail.smtp.port", "587"); props.put("mail.smtp.auth", "true"); // We need TTLS, which gmail requires props.put("mail.smtp.starttls.enable","true"); // Create a session Session session = Session.getDefaultInstance(props, new Auth()); try { MimeMessage msg=new MimeMessage(session); msg.setFrom(new InternetAddress("someone@example.com", "Name")); msg.addRecipient(Message.RecipientType.TO,new InternetAddress("recipient@example.com")); msg.setSubject("Email with Processing"); BodyPart messageBodyPart = new MimeBodyPart(); // Fill the message messageBodyPart.setText("Email sent with Processing"); Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart); // Part two is attachment messageBodyPart = new MimeBodyPart(); DataSource source = new FileDataSource("c:\\image.jpg"); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName("image.jpg"); multipart.addBodyPart(messageBodyPart); msg.setContent(multipart); msg.setSentDate(new Date()); Transport.send(msg); println("Mail sent!"); } catch(Exception e) { e.printStackTrace(); } }
あなたの回答
tips
プレビュー