java - 如何更正无效协议(protocol): null sending mail and Could not to SMTP host: using javax.邮件?

标签 java slack slack-api

我有一个问题,我正在使用 slack 和邮件。

我有一个方法来创建一个标题为“chan”的文件夹,但它不起作用:

方法getMessage()

for (String chan : channels){
                sentMessage(chan);//поменять куда вставить
                System.out.println(chan);

输入:

"Что то пошло не такjavax.mail.MessagingException: Could not to SMTP host: localhost, port 25; nested exception is : java.net.Connection refused connect"

如果我注释掉

sentMessage(chan);//поменять куда вставить

我已从 Slack 向邮件发送消息。

这是我的java程序。

       package ru.slacks;
        import com.github.seratch.jslack.*;
        import com.github.seratch.jslack.api.methods.SlackApiException;
        import com.github.seratch.jslack.api.methods.request.channels.ChannelsListRequest;
        import java.io.IOException;
        import java.util.List;
        import java.util.Properties;
        import java.util.Scanner;
        import com.github.seratch.jslack.api.methods.request.im.ImListRequest;
        import com.ullink.slack.simpleslackapi.*;
        import com.ullink.slack.simpleslackapi.SlackSession;
        import com.ullink.slack.simpleslackapi.events.SlackMessagePosted; 
        import com.ullink.slack.simpleslackapi.impl.ChannelHistoryModuleFactory;
        import static java.util.stream.Collectors.toList;
        import com.ullink.slack.simpleslackapi.impl.SlackSessionFactory;
        import org.glassfish.grizzly.http.server.util.StringParser;
        import javax.mail.*;
        import javax.mail.internet.InternetAddress;
        import javax.mail.internet.MimeMessage;
        import javax.swing.*;

        public class SlackTools {
            public SlackTools() throws IOException, SlackApiException {        
            }

         private String token=".....our_token......";
            static final Slack slack = Slack.getInstance();


            List<String> channels = slack.methods().channelsList(ChannelsListRequest.builder().token(token).build())
                    .getChannels().stream().map(c -> c.getId()).collect(toList());
        public void getChannels() throws IOException, SlackApiException {
                System.out.println("---------------Channels---------------");

                for (String chan : channels){
                sentMessage(chan);//поменять куда вставить
                System.out.println(chan);

            }
    }

      public class EmailAuthenticator extends javax.mail.Authenticator
        {
            private String login;
            private String password;
            public EmailAuthenticator (final String login, final String password)
            {
                this.login = login;
                this.password = password;
            }
            public PasswordAuthentication getPasswordAuthentication()
            {
                return new PasswordAuthentication(login, password);
            }
        }

  public void sentMessage(String chanel) throws IOException  {

    Properties imap = new Properties();
        imap.put("mail.debug"          , "false"  );
        imap.put("mail.store.protocol" , "imaps"  );//для доступа и обработки сообщений
        imap.put("mail.imap.ssl.enable", true);
        imap.put("mail.imap.port", 993);
    Authenticator auth = new EmailAuthenticator("tm12018@yandex.ru",
            "test123456");

        Session session = Session.getDefaultInstance(imap, auth);
        session.setDebug(false);
        try {
            Store store = session.getStore();

            // Подключение к почтовому серверу
            store.connect("imap.yandex.ru", "tm12018@yandex.ru", "test123456");

            // Папка входящих сообщений
            Folder inbox = store.getFolder(chanel);
            if (!inbox.exists())
                if (inbox.create(Folder.HOLDS_MESSAGES))
                    System.out.println("Folder was created successfully");
            // Открываем папку в режиме только для чтения
            //inbox.open(Folder.READ_ONLY);
            inbox.open(Folder.READ_WRITE);
            System.out.println("Количество сообщений : " +
                    String.valueOf(inbox.getMessageCount()));

            if (inbox.getMessageCount() == 0)
                return;


        } catch (NoSuchProviderException e) {
            System.err.println(e.getMessage());
        } catch (MessagingException e) {
            System.err.println(e.getMessage());
        }
    }





        public void getMessage() throws IOException  {


            Properties p = new Properties();
            p.put("mail.smtp.host", "smtp.yandex.ru");//протокол передачи сообщений, или smtp.gmail.com
            p.put("mail.smtp.socketFactory.port", 465);
            p.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            p.put("mail.smtp.auth", true);
            p.put("mail.smtp.port", 465);
           // p.put("mail.transport.protocol", "smtp");
            Scanner in = new Scanner(System.in);
            System.out.print("Enter your e-mail ");
            String user = in.nextLine();
            System.out.println("Enter your  password");
            String password = in.nextLine();

            Session s = Session.getDefaultInstance(p,
                    new Authenticator(){
                        protected PasswordAuthentication getPasswordAuthentication(){
                            return new PasswordAuthentication(user, password);}});

            System.out.print("Enter usernameto ");
            String userto = in.nextLine();

            for(String chan : channels ){

                SlackSession sessiont = SlackSessionFactory.createWebSocketSlackSession(token);
                sessiont.connect(); 
                ChannelHistoryModule channelHistoryModule = ChannelHistoryModuleFactory.createChannelHistoryModule(sessiont);
                List<SlackMessagePosted> messages = channelHistoryModule.fetchHistoryOfChannel(chan).stream().collect(toList());







                System.out.println("---------------Messages- " + chan + "--------------");

                for (SlackMessagePosted message : messages) {
                    System.out.println("E-mail:" + message.getUser().getUserMail() +  ", message: " + message.getMessageContent() );
                    try {
                        Message mess = new MimeMessage(s);


                        mess.setFrom(new InternetAddress(user));

                        mess.setRecipients(Message.RecipientType.TO, InternetAddress.parse(userto));

                        mess.setSubject(message.getMessageContent().toString());
                        mess.setText(chan);
                        Transport.send(mess);
                                    JOptionPane.showMessageDialog(null, "Письмо отправлено" );

                    } catch (Exception ex) {
                        JOptionPane.showMessageDialog(null, "Что то пошло не так" + ex);
                    }

                }
            }
        }

        public static void main(String[] args) throws IOException, SlackApiException, MessagingException {
      SlackTools sl = new SlackTools();

           sl.getChannels();
           sl.getMessage();
            System.exit(0);

        }
    }

最佳答案

看起来响应告诉您没有进程(或至少没有电子邮件主机)在监听您的本地主机端口 25。您确定它在那里吗?当您执行 telnet localhost 25 时会发生什么?

关于java - 如何更正无效协议(protocol): null sending mail and Could not to SMTP host: using javax.邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52592552/

相关文章:

slack-api - Slack 是否可以进行基于批准的注册?

package - 为 "Slack"存储库列出的 GPG key 已安装,但对于此软件包来说它们不正确 - 已解决

slack - 如何将内部 API(无法在办公网络外部访问)集成到 slacklash 命令

javascript - 松弛机器人 : how to use the slack channel functions

python - 如何将通过 HTTP POST 接收的数据从 Python Flask 脚本传递到单独的 Python 脚本进行处理?

java - 为什么 fill3DRect 在我自己的计算机之外的其他计算机上无法正常工作?

java - 将迭代器指向 Java 对象?

java - 使用 mail-service.xml 文件从 jboss 发送电子邮件

java - 尝试获取包括使用 AsciiDoc Java 接口(interface)

python - 将装饰器与 Python Slack API 一起使用