2011年6月30日木曜日

groovyとJavaMailでimapプロトコルを使用して指定したラベルのメールを取得する

groovyとJavaMailでimapプロトコルを使用して指定したラベルのメールを取得するには、以下のコードを実行します。

@Grab(group="javax.mail", module="mail", version="latest.integration")
import java.security.*
import java.util.*
import javax.mail.*
import javax.mail.search.*
import javax.mail.internet.*

host = "imap.gmail.com"
port = "993"
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider())
Properties props = new Properties()
props.put("mail.imap.host", host)
props.put("mail.imap.port", port)
props.put("mail.imap.socketFactory.port", port);
props.put("mail.imap.socketFactory.class",
"javax.net.ssl.SSLSocketFactory")
props.put("mail.imap.socketFactory.fallback", "false")

Session session = Session.getDefaultInstance(props,
[
getPasswordAuthentication: {
return new PasswordAuthentication("youraccount@gmail.com",
'yourpassword')
}
] as Authenticator
)
Store store = null
try
{
store = session.getStore("imap")
store.connect()
// スター付きの場合
// folder = store.getFolder("[Gmail]/スター付き")
// ラベルの場合
folder = store.getFolder("test")
folder.open(Folder.READ_ONLY)

for( message in folder.getMessages() ){
// 題名
println("subject:" + message.getSubject())
// 送信日付
println("date:" + message.getSentDate())
// from
println("from:" + message.getFrom()[0].getAddress())
println("content-type:" + message.getContentType())
if( message.getContentType().toLowerCase().startsWith("text/plain") ){
// テキスト形式
println("content:" + message.getContent())
} else {
if( message.getContent() instanceof Multipart){
// Multipartの場合
mp = message.getContent()
for(int ip=0;ip<mp.getCount();ip++){
println("content-type:" + mp.getBodyPart(ip).getContentType())
disposition = mp.getBodyPart(ip).getDisposition()?.toLowerCase()
if( !disposition.equals(Part.ATTACHMENT) &&
!disposition.equals(Part.INLINE) ){
println("content:" + mp.getBodyPart(ip).getContent())
}
}
}
}
}
folder.close(false)
}
finally
{
if( store != null )store.close()
}



動作環境
groovy 1.8.0, OpenJDK1.6.0_22

2011年6月29日水曜日

groovyとJavaMailでimapプロトコルを使用して指定した受信日以降のメールを取得する

groovyとJavaMailでimapプロトコルを使用して指定した受信日以降のメールを取得するには、以下のコードのようにReceivedDateTermクラスを使用します。

@Grab(group="javax.mail", module="mail", version="latest.integration")
import java.security.*
import java.util.*
import javax.mail.*
import javax.mail.search.*
import javax.mail.internet.*

host = "imap.gmail.com"
port = "993"
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider())
Properties props = new Properties()
props.put("mail.imap.host", host)
props.put("mail.imap.port", port)
props.put("mail.imap.socketFactory.port", port);
props.put("mail.imap.socketFactory.class",
"javax.net.ssl.SSLSocketFactory")
props.put("mail.imap.socketFactory.fallback", "false")

Session session = Session.getDefaultInstance(props,
[
getPasswordAuthentication: {
return new PasswordAuthentication("youraccount@gmail.com",
'yourpassword')
}
] as Authenticator
)
Store store = null
try
{
store = session.getStore("imap")
store.connect()
folder = store.getFolder("INBOX")
folder.open(Folder.READ_ONLY)

for( message in folder.search(
new ReceivedDateTerm(ComparisonTerm.GE,
new GregorianCalendar(2011,6-1,25).getTime()
)) ){
// 題名
println("subject:" + message.getSubject())
// 送信日付
println("date:" + message.getSentDate())
// from
println("from:" + message.getFrom()[0].getAddress())
println("content-type:" + message.getContentType())
if( message.getContentType().toLowerCase().startsWith("text/plain") ){
// テキスト形式
println("content:" + message.getContent())
} else {
if( message.getContent() instanceof Multipart){
// Multipartの場合
mp = message.getContent()
for(int ip=0;ip<mp.getCount();ip++){
println("content-type:" + mp.getBodyPart(ip).getContentType())
disposition = mp.getBodyPart(ip).getDisposition()?.toLowerCase()
if( !disposition.equals(Part.ATTACHMENT) &&
!disposition.equals(Part.INLINE) ){
println("content:" + mp.getBodyPart(ip).getContent())
}
}
}
}
}
folder.close(false)
}
finally
{
if( store != null )store.close()
}



動作環境
groovy 1.8.0, OpenJDK1.6.0_22

2011年6月28日火曜日

groovyとJavaMailでimapプロトコルを使用してメールにラベルを適用する

groovyとJavaMailでimapプロトコルを使用して、題名から検索したメールにラベルを適用するには、以下のコードを実行します。

@Grab(group="javax.mail", module="mail", version="latest.integration")
import java.security.*
import java.util.*
import javax.mail.*
import javax.mail.search.*
import javax.mail.internet.*

host = "imap.gmail.com"
port = "993"
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider())
Properties props = new Properties()
props.put("mail.imap.host", host)
props.put("mail.imap.port", port)
props.put("mail.imap.socketFactory.port", port);
props.put("mail.imap.socketFactory.class",
"javax.net.ssl.SSLSocketFactory")
props.put("mail.imap.socketFactory.fallback", "false")

Session session = Session.getDefaultInstance(props,
[
getPasswordAuthentication: {
return new PasswordAuthentication("youraccount@gmail.com",
'yourpassword')
}
] as Authenticator
)
Store store = null
try
{
store = session.getStore("imap")
store.connect()
folder = store.getFolder("INBOX")
tfolder = store.getDefaultFolder().list("サンプル")
if( tfolder.length == 0 ){
println("target folder is not found.")
return;
}
folder.open(Folder.READ_ONLY)
// 題名にsampleが含まれるメッセージにラベルを適用
folder.copyMessages(folder.search(new SubjectTerm("sample")), tfolder[0])
folder.close(false)
}
finally
{
if( store != null )store.close()
}



動作環境
groovy 1.8.0, OpenJDK1.6.0_22

2011年6月27日月曜日

groovyとJavaMailでimapプロトコルを使用してgmailのラベルをリネームする

groovyとJavaMailでimapプロトコルを使用してgmailのラベルをリネームするには、以下のコードを実行します。

@Grab(group="javax.mail", module="mail", version="latest.integration")
import java.security.*
import java.util.*
import javax.mail.*
import javax.mail.search.*
import javax.mail.internet.*

host = "imap.gmail.com"
port = "993"
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider())
Properties props = new Properties()
props.put("mail.imap.host", host)
props.put("mail.imap.port", port)
props.put("mail.imap.socketFactory.port", port);
props.put("mail.imap.socketFactory.class",
"javax.net.ssl.SSLSocketFactory")
props.put("mail.imap.socketFactory.fallback", "false")

Session session = Session.getDefaultInstance(props,
[
getPasswordAuthentication: {
return new PasswordAuthentication("youraccount@gmail.com",
'yourpassword')
}
] as Authenticator
)
Store store = null
try
{
store = session.getStore("imap")
store.connect()
oldfolder = store.getDefaultFolder().list("sample")
if(oldfolder == null || oldfolder.length == 0)return
Folder newfolder = store.getDefaultFolder().getFolder("サンプル")
result = oldfolder[0].renameTo(newfolder)
println("rename to new folder: result=${result}")
}
finally
{
if( store != null )store.close()
}


動作環境
groovy 1.8.0, OpenJDK1.6.0_22

2011年6月26日日曜日

groovyとJavaMailでimapプロトコルを使用してgmailのラベルを削除する

groovyとJavaMailでimapプロトコルを使用してgmailのラベルを削除するには、以下のコードを実行します。

@Grab(group="javax.mail", module="mail", version="latest.integration")
import java.security.*
import java.util.*
import javax.mail.*
import javax.mail.search.*
import javax.mail.internet.*

host = "imap.gmail.com"
port = "993"
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider())
Properties props = new Properties()
props.put("mail.imap.host", host)
props.put("mail.imap.port", port)
props.put("mail.imap.socketFactory.port", port);
props.put("mail.imap.socketFactory.class",
"javax.net.ssl.SSLSocketFactory")
props.put("mail.imap.socketFactory.fallback", "false")

Session session = Session.getDefaultInstance(props,
[
getPasswordAuthentication: {
return new PasswordAuthentication("youraccount@gmail.com",
'yourpassword')
}
] as Authenticator
)
Store store = null
try
{
store = session.getStore("imap")
store.connect()
for( folder in store.getDefaultFolder().list("カスタムラベル") ){
folder.delete(true)
}
}
finally
{
if( store != null )store.close()
}


動作環境
groovy 1.8.0, OpenJDK1.6.0_22

groovyとJavaMailでimapプロトコルを使用してgmailのラベルを作成する

groovyとJavaMailでimapプロトコルを使用してgmailのラベルを作成するには、以下のコードを実行します。

@Grab(group="javax.mail", module="mail", version="latest.integration")
import java.security.*
import java.util.*
import javax.mail.*
import javax.mail.search.*
import javax.mail.internet.*

host = "imap.gmail.com"
port = "993"
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider())
Properties props = new Properties()
props.put("mail.imap.host", host)
props.put("mail.imap.port", port)
props.put("mail.imap.socketFactory.port", port);
props.put("mail.imap.socketFactory.class",
"javax.net.ssl.SSLSocketFactory")
props.put("mail.imap.socketFactory.fallback", "false")

Session session = Session.getDefaultInstance(props,
[
getPasswordAuthentication: {
return new PasswordAuthentication("youraccount@gmail.com",
'yourpassword')
}
] as Authenticator
)
Store store = null
try
{
store = session.getStore("imap")
store.connect()
Folder folder = store.getDefaultFolder().getFolder("カスタムラベル")
result = folder.create(Folder.HOLDS_MESSAGES)
println("new folder creation: result=${result}")
}
finally
{
if( store != null )store.close()
}



動作環境
groovy 1.8.0, OpenJDK1.6.0_22

2011年6月25日土曜日

groovyとJavaMailでimapプロトコルを使用してgmailのラベルを列挙する

groovyとJavaMailでimapプロトコルを使用してgmailのラベルを列挙するには、以下のコードを実行します。

@Grab(group="javax.mail", module="mail", version="latest.integration")
import java.security.*
import java.util.*
import javax.mail.*
import javax.mail.search.*
import javax.mail.internet.*

host = "imap.gmail.com"
port = "993"
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider())
Properties props = new Properties()
props.put("mail.imap.host", host)
props.put("mail.imap.port", port)
props.put("mail.imap.socketFactory.port", port);
props.put("mail.imap.socketFactory.class",
"javax.net.ssl.SSLSocketFactory")
props.put("mail.imap.socketFactory.fallback", "false")

Session session = Session.getDefaultInstance(props,
[
getPasswordAuthentication: {
return new PasswordAuthentication("youraccount@gmail.com",
'yourpassword')
}
] as Authenticator
)
Store store = null
try
{
store = session.getStore("imap")
store.connect()
for(folder in store.getDefaultFolder().list("*")){
println("folder:" + folder.getFullName());
}
}
finally
{
if( store != null )store.close()
}



動作環境
groovy 1.8.0, OpenJDK1.6.0_22

2011年6月22日水曜日

groovyとJavaMailでimapプロトコルを使用してgmailのメールを受信する

groovyとJavaMailでimapプロトコルを使用してgmailのメールを受信するには、以下のコードを実行します。

@Grab(group="javax.mail", module="mail", version="latest.integration")
import java.security.*
import java.util.*
import javax.mail.*
import javax.mail.search.*
import javax.mail.internet.*

host = "imap.gmail.com"
port = "993"
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider())
Properties props = new Properties()
props.put("mail.imap.host", host)
props.put("mail.imap.port", port)
props.put("mail.imap.socketFactory.port", port);
props.put("mail.imap.socketFactory.class",
"javax.net.ssl.SSLSocketFactory")
props.put("mail.imap.socketFactory.fallback", "false")

Session session = Session.getDefaultInstance(props,
[
getPasswordAuthentication: {
return new PasswordAuthentication("youraccount@gmail.com",
'yourpassword')
}
] as Authenticator
)
Store store = null
try
{
store = session.getStore("imap")
store.connect()
folder = store.getFolder("INBOX")
folder.open(Folder.READ_ONLY)

for( message in folder.getMessages() ){
// 題名
println("subject:" + message.getSubject())
// 送信日付
println("date:" + message.getSentDate())
// from
println("from:" + message.getFrom()[0].getAddress())
println("content-type:" + message.getContentType())
if( message.getContentType().toLowerCase().startsWith("text/plain") ){
// テキスト形式
println("content:" + message.getContent())
} else {
if( message.getContent() instanceof Multipart){
// Multipartの場合
mp = message.getContent()
for(int ip=0;ip<mp.getCount();ip++){
println("content-type:" + mp.getBodyPart(ip).getContentType())
disposition = mp.getBodyPart(ip).getDisposition()?.toLowerCase()
if( !disposition.equals(Part.ATTACHMENT) &&
!disposition.equals(Part.INLINE) ){
println("content:" + mp.getBodyPart(ip).getContent())
}
}
}
}
}
folder.close(false)
}
finally
{
if( store != null )store.close()
}


動作環境
groovy 1.8.0, OpenJDK1.6.0_22

2011年6月20日月曜日

groovyとJavaMailでgmailのメールを受信する

groovyとJavaMailでgmailのメールを受信するには、以下のコードを実行します。

@Grab(group="javax.mail", module="mail", version="latest.integration")
import java.security.*
import java.util.*
import javax.mail.*
import javax.mail.search.*
import javax.mail.internet.*

popHost = "pop.gmail.com"
popPort = "995"
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider())
Properties props = new Properties()
props.put("mail.pop3.host", popHost)
props.put("mail.pop3.port", popPort)
props.put("mail.pop3.socketFactory.port", popPort);
props.put("mail.pop3.socketFactory.class",
"javax.net.ssl.SSLSocketFactory")
props.put("mail.pop3.socketFactory.fallback", "false")

Session session = Session.getDefaultInstance(props,
[
getPasswordAuthentication: {
return new PasswordAuthentication("youraccount@gmail.com",
'yourpassword')
}
] as Authenticator
)
Store store = null
try
{
store = session.getStore("pop3")
store.connect()
folder = store.getFolder("INBOX")
folder.open(Folder.READ_ONLY)

for( message in folder.getMessages() ){
// 題名
println("subject:" + message.getSubject())
// 送信日付
println("date:" + message.getSentDate())
// from
println("from:" + message.getFrom()[0].getAddress())
println("content-type:" + message.getContentType())
if( message.getContentType().startsWith("text/plain") ){
// テキスト形式
println("content:" + message.getContent())
} else {
if( message.getContent() instanceof Multipart){
// Multipartの場合
mp = message.getContent()
for(int ip=0;ip<mp.getCount();ip++){
println("content-type:" + mp.getBodyPart(ip).getContentType())
disposition = mp.getBodyPart(ip).getDisposition()
if( !disposition.equals(Part.ATTACHMENT) &&
!disposition.equals(Part.INLINE) ){
println("content:" + mp.getBodyPart(ip).getContent())
}
}
}
}
}
folder.close(false)
}
finally
{
if( store != null )store.close()
}


動作環境
groovy 1.8.0, OpenJDK1.6.0_22