'Mail'에 해당되는 글 3건

  1. 2012.05.02 javamail pop3 ssl 적용.
  2. 2012.04.19 JavaMail 링크
  3. 2009.07.22 [PERL] 메일 발송 테스트

javamail pop3 ssl 적용.

ITWeb/개발일반 2012. 5. 2. 20:47

그냥 일반 웹메일에서 외부메일 가져오기로 기능 확인 하려다 삽질만 했내요.
기냥 코딩 할걸..ㅡ.ㅡ;;
- 네이버 메일에서 외부메일 가져오기는 SSL 지원이 없구요.
- G메일에서는 SSL Port 변경이 없내요..

javamail api 를 이용해서 구현 가능합니다.
아래는 샘플 코드 이구요.
퍼왔습니다.

[원본링크]


[샘플코드]

You can use following utility class to conect to Gmail. Since Gmail only supports POP3 connection with SSL, the connection is established via SSL.

package org.javatipsjavaemaillistimporter;

import com.sun.mail.pop3.POP3SSLStore;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.FetchProfile;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.URLName;
import javax.mail.internet.ContentType;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.ParseException;

public class GmailUtilities {
    
    private Session session = null;
    private Store store = null;
    private String username, password;
    private Folder folder;
    
    public GmailUtilities() {
        
    }
    
    public void setUserPass(String username, String password) {
        this.username = username;
        this.password = password;
    }
    
    public void connect() throws Exception {
        
        String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
        
        Properties pop3Props = new Properties();
        
        pop3Props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY);
        pop3Props.setProperty("mail.pop3.socketFactory.fallback""false");
        pop3Props.setProperty("mail.pop3.port",  "995");
        pop3Props.setProperty("mail.pop3.socketFactory.port""995");
        
        URLName url = new URLName("pop3""pop.gmail.com"995"",
                username, password);
        
        session = Session.getInstance(pop3Props, null);
        store = new POP3SSLStore(session, url);
        store.connect();
        
    }
    
    public void openFolder(String folderNamethrows Exception {
        
        // Open the Folder
        folder = store.getDefaultFolder();
        
        folder = folder.getFolder(folderName);
        
        if (folder == null) {
            throw new Exception("Invalid folder");
        }
        
        // try to open read/write and if that fails try read-only
        try {
            
            folder.open(Folder.READ_WRITE);
            
        catch (MessagingException ex) {
            
            folder.open(Folder.READ_ONLY);
            
        }
    }
    
    public void closeFolder() throws Exception {
        folder.close(false);
    }
    
    public int getMessageCount() throws Exception {
        return folder.getMessageCount();
    }
    
    public int getNewMessageCount() throws Exception {
        return folder.getNewMessageCount();
    }
    
    public void disconnect() throws Exception {
        store.close();
    }
    
    public void printMessage(int messageNothrows Exception {
        System.out.println("Getting message number: " + messageNo);
        
        Message m = null;
        
        try {
            m = folder.getMessage(messageNo);
            dumpPart(m);
        catch (IndexOutOfBoundsException iex) {
            System.out.println("Message number out of range");
        }
    }
    
    public void printAllMessageEnvelopes() throws Exception {
        
        // Attributes & Flags for all messages ..
        Message[] msgs = folder.getMessages();
        
        // Use a suitable FetchProfile
        FetchProfile fp = new FetchProfile();
        fp.add(FetchProfile.Item.ENVELOPE);        
        folder.fetch(msgs, fp);
        
        for (int i = 0; i < msgs.length; i++) {
            System.out.println("--------------------------");
            System.out.println("MESSAGE #" (i + 1":");
            dumpEnvelope(msgs[i]);
            
        }
        
    }
    
    public void printAllMessages() throws Exception {
     
        // Attributes & Flags for all messages ..
        Message[] msgs = folder.getMessages();
        
        // Use a suitable FetchProfile
        FetchProfile fp = new FetchProfile();
        fp.add(FetchProfile.Item.ENVELOPE);        
        folder.fetch(msgs, fp);
        
        for (int i = 0; i < msgs.length; i++) {
            System.out.println("--------------------------");
            System.out.println("MESSAGE #" (i + 1":");
            dumpPart(msgs[i]);
        }
        
    
    }
    
    
    public static void dumpPart(Part pthrows Exception {
        if (instanceof Message)
            dumpEnvelope((Message)p);
       
        String ct = p.getContentType();
        try {
            pr("CONTENT-TYPE: " (new ContentType(ct)).toString());
        catch (ParseException pex) {
            pr("BAD CONTENT-TYPE: " + ct);
        }
        
        /*
         * Using isMimeType to determine the content type avoids
         * fetching the actual content data until we need it.
         */
        if (p.isMimeType("text/plain")) {
            pr("This is plain text");
            pr("---------------------------");
            System.out.println((String)p.getContent());        
        else {
            
            // just a separator
            pr("---------------------------");
            
        }
    }
    
    public static void dumpEnvelope(Message mthrows Exception {        
        pr(" ");
        Address[] a;
        // FROM
        if ((a = m.getFrom()) != null) {
            for (int j = 0; j < a.length; j++)
                pr("FROM: " + a[j].toString());
        }
        
        // TO
        if ((a = m.getRecipients(Message.RecipientType.TO)) != null) {
            for (int j = 0; j < a.length; j++) {
                pr("TO: " + a[j].toString());                
            }
        }
        
        // SUBJECT
        pr("SUBJECT: " + m.getSubject());
        
        // DATE
        Date d = m.getSentDate();
        pr("SendDate: " +
                (d != null ? d.toString() "UNKNOWN"));
        

    }
    
    static String indentStr = "                                               ";
    static int level = 0;
    
    /**
     * Print a, possibly indented, string.
     */
    public static void pr(String s) {
        
        System.out.print(indentStr.substring(0, level * 2));
        System.out.println(s);
    }
    
}

And the following code snippet shows how to use the above utility class. You can uncomment printAllMessageEnvelopes() method to just print the envelopes of the messages instead of whole messages.

package org.javatipsjavaemaillistimporter;

public class Main {
    
    /** Creates a new instance of Main */
    public Main() {
    }
    
    /**
     @param args the command line arguments
     */
    public static void main(String[] args) {
        
        try {
            
            GmailUtilities gmail = new GmailUtilities();
            gmail.setUserPass(myemail@gmail.com""mypassword");
            gmail.connect();
            gmail.openFolder("INBOX");
            
            int totalMessages = gmail.getMessageCount();
            int newMessages = gmail.getNewMessageCount();
            
            System.out.println("Total messages = " + totalMessages);
            System.out.println("New messages = " + newMessages);
            System.out.println("-------------------------------");
            
            //gmail.printAllMessageEnvelopes();
            gmail.printAllMessages();
            
        catch(Exception e) {
            e.printStackTrace();
            System.exit(-1);
        }
        
    }
    
}


:

JavaMail 링크

ITWeb/개발일반 2012. 4. 19. 15:42
:

[PERL] 메일 발송 테스트

ITWeb/개발일반 2009. 7. 22. 16:41


우선 기본적으루다.. sendmail 을 이용해서 발송 해야 하는 건 아시죠..
리눅스 기반 입니다.

일단 sendmail 이 실행 되어 있어야 겠죠.
http://www.faqs.org/docs/linux_network/x15649.html

Perl 용 sendmail 모듈을 설치 하시죠.
http://search.cpan.org/~mivkovic/Mail-Sendmail-0.79/
http://search.cpan.org/~mivkovic/Mail-Sendmail-0.79_16/Sendmail.pm
저는 매뉴얼 설치 했습니다.
별거 없죠... 기냥.. 소스 받아서 압축 풀고 /usr/sbin/perl/site_perl 에 가져다 놓으면 끝..

샘플 코드 위에 링크 보면 있죠.. ㅋ
아래 코드는 구글링 해보시면 가장 많이 나오는 예제 중 하나 입니다.
두 가지를 다 넣어서 테스트 해본 거죠..

sub setSendMail {
    my $sendmailer = '/usr/sbin/sendmail';

    %mail = (
                To          => 'your@email.com',
                From        => 'your@email.com',
                Subject     => '제목 입력',
                Message     => "메시지 입력"
            );

    sendmail(%mail) or die $Mail::Sendmail::error;

    print "OK. Log says:\n", $Mail::Sendmail::log;

    open (MAIL, "|$sendmailer -oi -t");
    print MAIL "From: your@email.com\n";
    print MAIL "To: your@email.com\n";
    print MAIL "Subject: 제목입력\n\n";
    print MAIL "메시지 입력\n";
    close(MAIL);
}

그럼 즐프 하세요.

: