- PR -

JavaMailとUCS2

1
投稿者投稿内容
tarnwo
ベテラン
会議室デビュー日: 2002/10/25
投稿数: 58
投稿日時: 2003-10-17 21:43
いつも参考にさせていただいております。
Java技術者の皆様、お知恵を貸してください。

JavaMailで文字コードをUCS2で送信したいのですが、
Unicodeで指定すると、データはUnicodeで変換されていますが
実際にSMTPで送られてきたものはQuited-PrintableでEncodeされてしまうようです。

生のUCS2のデータを受信したいのですが、
どのように行えばよいのでしょうか。

以下簡単なメール送信プログラムです。

import java.io.*;
import java.util.*;

import java.util.Properties;
import java.util.Date;
import javax.mail.Session;
import javax.mail.Message;
import javax.mail.MessagingExcepropion;
import javax.mail.Transport;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.InternetAddress;

public class MailTest{
public String CHAR_SET = "Unicode";

public static void main(String args[]) {
MailTest mt = new MailTest();
if(args.length <5){
mt.writeUsage();
}
if(args.length == 6){
mt.CHAR_SET = args[5];
}
mt.send(args[0],args[1],args[2],args[3],args[4]);
}

public void writeUsage(){
System.out.println("Usage:");
System.out.println("java -classpath \"activation.jar;mail.jar\" MailTest <smtp.host> <from> <to> <title> <text> [<charset>]");
}
public void send(String host, String from, String to, String title, String txt){
// メール送信
try {
Properties prop = System.getProperties();

// SMTP サーバーアドレス
prop.put("mail.smtp.host", host);

// メール準備
Session session = Session.getDefaultInstance(prop, null);
MimeMessage maimemessage = new MimeMessage(session);

// 送信元
maimemessage.setFrom(new InternetAddress(from, "送信者名", CHAR_SET));

// 送信先
maimemessage.setRecipients(Message.RecipientType.TO, to);

// 形式
maimemessage.setHeader("Content-Type", "text/plain");

// タイトル
maimemessage.setSubject(title, CHAR_SET);

// 本文
maimemessage.setText(txt, CHAR_SET);

// 送信日
maimemessage.setSentDate(new Date());

// 送信
Transport.send(maimemessage);
} catch (MessagingExcepropion e){
System.out.println("文字コード不正:" + CHAR_SET);
String msg = "メール送信エラー\n" + e.toString();
System.out.println(msg);
} catch (Excepropion e) {
String msg = "メール送信エラー\n" + e.toString();
System.out.println(msg);
}

}

}
Paul
ベテラン
会議室デビュー日: 2002/04/30
投稿数: 75
お住まい・勤務地: 東京
投稿日時: 2003-10-22 12:14
中込です。

引用:

JavaMailで文字コードをUCS2で送信したいのですが、
Unicodeで指定すると、データはUnicodeで変換されていますが
実際にSMTPで送られてきたものはQuited-PrintableでEncodeされてしまうようです。

生のUCS2のデータを受信したいのですが、
どのように行えばよいのでしょうか。



コード:
	// 内容転送符号化ヘッダフィールドの指定
	maimemessage.setHeader("Content-Transfer-Encoding", "8bit")


これで、Quited-Printableによる転送符号化は行なわれなくなるはずです。

ただし、Unicode指定(おそらく、UTFの16bit BOM付きとして解釈される?)の符号化なしの送信が、RFC821(SMTP)に準拠しないことはお分かりですね。すなわち、SMTPサーバによって、意図したとおりハンドリングされるかどうかは別問題です。

#多分、SMTPサーバの実装をされているのかと思いますが・・・。
tarnwo
ベテラン
会議室デビュー日: 2002/10/25
投稿数: 58
投稿日時: 2003-10-28 14:39
回答ありがとうございます。
#遅くなって申し訳ございません。

BOM回避はUnicodeBigUnmarkedまたはUTF-16BEで可能と聞きました。

結局Content-TypeのCharsetにUCS2を指定しなければならないので
JavaMailは諦めて、直接ソケットを開いて投げる作りにしました。

スレ違いかもしれませんが、電子メールのアドレスで使用できる文字についての
国際的な仕様というものはあるのでしょうか。
検索が下手なのか、見つけることができませんでした。
Paul
ベテラン
会議室デビュー日: 2002/04/30
投稿数: 75
お住まい・勤務地: 東京
投稿日時: 2003-10-28 17:27
中込です。
引用:

スレ違いかもしれませんが、電子メールのアドレスで使用できる文字についての
国際的な仕様というものはあるのでしょうか。


たとえば
ftp://ftp.isi.edu/in-notes/rfc821.txt
邦訳なら
http://www.mars.dti.ne.jp/~torao/rfc/rfc821-ja.txt
http://www.asahi-net.or.jp/~bd9y-ktu/dtd_f/rfc_f/rfc821j.html

いずれにしてもASCIIです。
1

スキルアップ/キャリアアップ(JOB@IT)