简体   繁体   中英

SubethaSmtp example

Can you please tell me how to use SubethaSmtp library?

<dependency>
<groupId>org.subethamail</groupId>
<artifactId>subethasmtp</artifactId>
<version>3.1.7</version>
<scope>test</scope>
</dependency>

I just want to listen to the emails on a port number from my Gmail/outlook inbox and display them in console window/log them in text file/DB.

I studied most of the API doc but I'm not being able to put the pieces together to get the things working.

Can you please tell me about a working example in spring-boot?

Here is my code below so far

package emailbox;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Service;
import org.subethamail.smtp.helper.SimpleMessageListenerAdapter;
import org.subethamail.smtp.server.SMTPServer;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

@SuppressWarnings("restriction")
@PropertySource("/emailbox.properties")
@Service
public class SMTPServerService {

    @Value("${smtpserver.enabled}")
    String enabled="";

    @Value("${smtpserver.hostName}")
    String hostName="";

    @Value("${smtpserver.port}")
    String port="";

    SMTPServer smtpServer;

    public SMTPServerService() {
    }

@PostConstruct 
public void start() { 
    if(enabled.equalsIgnoreCase("true"))
{ 
        SimpleMessageListenerImpl l = new SimpleMessageListenerImpl(); 
        smtpServer = new SMTPServer(new SimpleMessageListenerAdapter(l)); 
        smtpServer.setHostName(this.hostName); 
        smtpServer.setPort(Integer.valueOf(port)); 
        smtpServer.start(); 
        System.out.println("****** SMTP Server is running for domain "+smtpServer.getHostName()+" on port "+smtpServer.getPort()); 
        } else { 
        System.out.println("****** SMTP Server NOT ENABLED by settings "); 
        } 
}

@PreDestroy 
public void stop() { 
if(enabled.equalsIgnoreCase("true")){ 
System.out.println("****** Stopping SMTP Server for domain "+smtpServer.getHostName()+" on port "+smtpServer.getPort()); 
smtpServer.stop(); 
} 
}

    public boolean isRunning() {
        return smtpServer.isRunning();
    }
}

package emailbox;

import java.io.InputStream;
import java.util.Properties;

import javax.mail.Session;
import javax.mail.internet.MimeMessage;

 import org.subethamail.smtp.helper.SimpleMessageListener;

 public class SimpleMessageListenerImpl implements SimpleMessageListener {
public SimpleMessageListenerImpl() {
}

@Override
public boolean accept(String from, String recipient) {
    return true;
}

@Override 
public void deliver(String from, String recipient, InputStream data) { 
Session session = Session.getDefaultInstance(new Properties()); 
MimeMessage m = new MimeMessage(session,data); 
ReceivedEmail email=new ReceivedEmail(m); 
// ... here we go with email message ... 
 }
 }

Subetha SMTP is used for building an SMTP Server. You should be using POP or IMAP for this purpose to read emails from your inbox. Please see the example below: You just need java mail api.

public void receiveMail(){
            Properties props = System.getProperties();
            props.setProperty("mail.store.protocol", "imap");
            props.put("mail.imap.host", host);
            props.put("mail.imap.port", port);
            props.put("mail.imap.auth.login.disable", "true");
            props.put("mail.imap.auth.plain.disable", "false");
            //props.put("mail.imap.ssl.enable", "true");
            props.put("mail.debug", "true");
            props.put("mail.debug.auth", "true");


            Session session = Session.getInstance(props, new javax.mail.Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(user, pwd);
                }
            });

            store = (IMAPStore) session.getStore("imap");



            store.connect(host, user, pwd);
            folder = (IMAPFolder) store.getFolder("INBOX"); 

           openFolder(folder);
  }
   public static void openFolder(IMAPFolder folder) throws MessagingException, IOException{
          String subject = null;
          if (!folder.isOpen())
              folder.open(Folder.READ_WRITE);
          Message[] messages = folder.getMessages();
          System.out.println("No of Messages : " + folder.getMessageCount());
          System.out.println("No of Unread Messages : " + folder.getUnreadMessageCount());
          System.out.println(messages.length);
          if (messages.length > 0) {
              for (int i = 0; i < 1; i++) {

                  System.out.println("*****************************************************************************");
                  System.out.println("MESSAGE " + (i + 1) + ":");
                  Message msg = messages[i];
                  System.out.println("Message Number: " + msg.getMessageNumber());
                  // Object String;
                  System.out.println("UID: " + folder.getUID(msg));

                  subject = msg.getSubject();

                  System.out.println("Subject: " + subject);
                  System.out.println("From: " + msg.getFrom()[0]);
                  System.out.println("To: " + msg.getAllRecipients()[0]);
                  System.out.println("Date: " + msg.getReceivedDate());
                  System.out.println("Size: " + msg.getSize());
                  System.out.println(msg.getFlags());
                  System.out.println("Body: \n" + msg.getContent());
                  System.out.println(msg.getContentType());

              }
          }
    }

A full example of receiving emails with SubEtha SMTP (and maybe if you're using Spring Boot also) is available here

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM