• 検索結果がありません。

SMTP でメッセージを送信するアプリケーションの例

第 7 章 ネットワーク 115

7.2 SMTP

7.2.3 SMTP でメッセージを送信するアプリケーションの例

それでは、SMTPを使ってメッセージを送信するアプリケーションを作ってみましょう。

まず最初に、次のようなプロジェクトを作成してください。

Project name smtp Application name SMTP

Package name org.example.smtp Create Activity SmtpActivity

次に、main.xmlを次のように書き換えてください。

レイアウトXMLの例 main.xml

7.2. SMTP 119

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

<TableLayout>

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:stretchColumns="1"

<TableRow>>

<TextView android:text="サーバー"/>

<EditText android:id="@+id/server"/>

</TableRow>

<TableRow>

<TextView android:text="送信者"/>

<EditText android:id="@+id/from"/>

</TableRow>

<TableRow>

<TextView android:text="受信者"/>

<EditText android:id="@+id/to"/>

</TableRow>

<TableRow>

<TextView android:text="件名"/>

<EditText android:id="@+id/subject"/>

</TableRow>

<TableRow>

<TextView android:text="本文"/>

<EditText android:id="@+id/body"/>

</TableRow>

</TableLayout>

<Button android:id="@+id/send"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="送信"

/>

<TextView android:id="@+id/log"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

</LinearLayout>

次に、Smtpという名前の新しいクラスを作って、Smtp.javaの内容を次のように書き換えて ください。

プログラムの例 Smtp.java package org.example.smtp;

import java.io.*;

import java.net.*;

class Smtp {

static StringBuffer sb;

static Socket socket;

static BufferedReader reader;

static BufferedWriter writer;

static void open(String host) throws IOException { socket = new Socket(host, 25);

try {

reader = new BufferedReader(

new InputStreamReader(socket.getInputStream()));

writer = new BufferedWriter(

new OutputStreamWriter(

socket.getOutputStream(), "ISO-2022-JP"));

} catch (IOException e) { socket.close();

throw e;

} }

static void close() throws IOException { reader.close();

writer.close();

socket.close();

}

static void send(String s) throws IOException { writer.write(s + "\r\n");

writer.flush();

}

static String receive() throws IOException { String line = reader.readLine();

sb.append(line);

sb.append(System.getProperty("line.separator"));

return line;

}

static String getLocalHostName() throws UnknownHostException { String name = "localhost";

name = InetAddress.getLocalHost().getHostName();

return name;

}

static void sendReceive(String s) throws IOException { send(s);

String reply = receive();

if (reply.startsWith("4") || reply.startsWith("5")) throw new IOException("error replied: " + reply);

}

public static String sendSmtp(String server, String from, String to, String subject, String body) {

sb = new StringBuffer();

try {

open(server);

sendReceive("helo " + getLocalHostName());

sendReceive("mail from:<" + from + ">");

sendReceive("rcpt to:<" + to + ">");

sendReceive("data");

send("To: " + to);

send("From: " + from);

send("Subject: " + subject);

send("MIME-Version: 1.0");

send("Content-Type: text/plain; charset=ISO-2022-JP");

send("");

send(body);

sendReceive(".");

sendReceive("quit");

close();

} catch (IOException e) { sb.append(e.toString());

}return sb.toString();

} }

次に、SmtpActivity.javaを次のように書き換えてください。

参考文献 121 プログラムの例 SmtpActivity.java

package org.example.smtp;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.EditText;

import android.widget.Button;

import android.widget.TextView;

public class SmtpActivity extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.main);

final Button send = (Button) findViewById(R.id.send);

send.setOnClickListener(new OnClickListener() { public void onClick(View v) {

sendSmtp();

} } });

private void sendSmtp() {

EditText server = (EditText) findViewById(R.id.server);

EditText from = (EditText) findViewById(R.id.from);

EditText to = (EditText) findViewById(R.id.to);

EditText subject = (EditText) findViewById(R.id.subject);

EditText body = (EditText) findViewById(R.id.body);

TextView log = (TextView) findViewById(R.id.log);

log.setText(Smtp.sendSmtp(

server.getText().toString(), from.getText().toString(), to.getText().toString(), subject.getText().toString(), body.getText().toString() } ));

}

最後に、Androidマニフェストのmanifest要素の子供として、

<uses-permission android:name="android.permission.INTERNET"/>

という要素を書き加えてください。

これで完成です。実行してみてください。そして、SMTPサーバーが動作しているホストのホ スト名、送信者のメールアドレス、受信者のメールアドレス、件名、本文を入力して、ボタンを クリックしてください。そうすると、SMTPサーバーに対してメッセージが送信されるはずで す。もしも、

java.net.UnknownHostException

という例外が発生する場合は、ホスト名の代わりにIPアドレスを入力して試してみてください。

参考文献

[Ableson,2009] Frank Ableson, Charlie Collins and Robi Sen, Unlocking Android: A Devel-oper’s Guide, Manning, 2009, ISBN 978-1-933988-67-2. 邦訳(安生真、土肥拓生、谷沢智 史)、『コードからわかるAndroidプログラミングのしくみ:開発で困ったときの解決アプロー チ』、日経BP社、2010、ISBN 978-4-8222-8409-1。

[Burnette,2008] Ed Burnette,Hello, Android: Introducing Google’s Mobile Development Plat-form, Pragmatic Bookshelf, 2008, ISBN 978-1-934356-17-3. 邦訳(長尾高弘)、『初めての

Android』、オライリー・ジャパン、2009、ISBN 978-4-87311-409-5。

[DiMarzio,2008] Jerome DiMarzio,Android: A Programmer’s Guide, McGraw-Hill, 2008, ISBN 978-0-07-159988-7. 邦訳(土肥拓生)、『初めてのGoogle Androidプログラミング:サンプル で学ぶ必須作法と基本手順』、日経BP社、2009、ISBN 978-4-8222-8371-1。

[Meier,2009] Reto Meier, Professional Android Application Development, Wiley Publishing, 2009, ISBN 978-0-470-34471-2.

[Murphy,2009] Mark L. Murphy,The Busy Coder’s Guide to Android Development, Common-sWare, 2009, ISBN 978-0-9816780-0-9.

[Rogers,2009] Rick Rogers, John Lombardo, Zigurd Mednieks and Blake Meike,Android Ap-plication Development: Programming with the Google SDK, O’Reilly, 2009, ISBN 978-0-596-52147-9.

[木南,2008] 木南英夫、「Google Androidアプリ開発入門」、『組込みプレス』、Vol. 12、技術評 論社、2008、ISBN 978-4-7741-3571-7。

[木南,2009] 木南英夫、『Google Androidアプリケーション開発入門:画面作成からデバイス制 御まで 基本機能の全容』、日経BP社、2009、ISBN 978-4-8222-8390-2。

[江川,2008] 江川崇、竹端進、山田暁通、麻野耕一、山岡敏夫、藤井大助、窪田康大、藤田泰介、

佐野徹郎、『Google Android完全解説』、アスキー、2008、ISBN 978-4-7561-5130-8。

[江川,2009] 江川崇、藤井大助、麻野耕一、藤田泰介、山田暁通、山岡敏夫、佐野徹郎、竹端進、

『Google Androidプログラミング入門』、アスキー、2009、ISBN 978-4-04-867956-5。

[柴田,2009] 柴田文彦、藤枝崇史、伊原頌二、『入門Google Androidプログラミング』、インプ レスジャパン、2009、ISBN 978-4-8443-2771-4。

[嶋,2008] 嶋是一、『Google Android入門:携帯電話開発の新技術』、技術評論社、2008、ISBN 978-4-7741-3462-8。

[嶋,2009] 嶋是一、中村秀樹、江川崇、杉本礼彦、安生真、内嶋教人、今村謙之、山崎淳、木南

英夫、安藤恐竜、「Androidアプリ開発「匠」への道」、『Software Design』、2009年3月号、

技術評論社、2009。

[西沢,2009] 西沢直木、『SQLite入門:すぐに使える軽快・軽量データベースエンジン・第2版』、

翔泳社、2009、ISBN 978-4-7981-1944-1。

[布留川,2009] 布留川英一、『Android 1.5プログラミングバイブル』、ソシム、2009、ISBN 978-4-88337-663-6。

[柳井,2009] 柳井政和、『Google Androidアプリ開発ガイド』、秀和システム、2009、ISBN 978-4-7980-2300-7。

[若林,2009] 若林登、『はじめてのAndroidプログラミング』、工学社、2009、ISBN 978-4-7775-1435-9。

123

索引

要素, 69

.apk(拡張子), 10 .apkファイル, 10 .class(拡張子), 9 .classファイル, 9, 10 .dex(拡張子), 9 .dexファイル, 9, 10 3次ベジェ曲線, 85 AbsoluteLayout要素, 45 ACTION_DOWN, 91

ACTION_MOVE, 91 ACTION_UP, 91 Activity, 16, 98 activity要素, 56, 69 add, 37, 52

ADT, 10

AlertDialog.Builder, 47 Android, 9

によるブロードキャスト, 76 Android SDK, 10

android:background属性, 22 android:gravity属性, 28 android:id属性, 25

android:layout_height属性, 18, 42, 44 android:layout_width属性, 18, 42, 44 android:layout_x属性, 45

android:layout_y属性, 45 android:maxLength属性, 29 android:numeric属性, 29

android:orientation属性, 34, 43 android:permission属性, 76 android:scrollbars属性, 28 android:singleLine属性, 29 android:src属性, 55

android:stretchColumns属性, 44 android:text属性, 18

android:textColor属性, 22 android:textSize属性, 24 android:typeface属性, 18 AndroidManifest.xml, 16 Androidアプリケーション, 9, 15

のインストール, 15 の削除, 15

Androidエミュレーター, 10, 15 のシェル, 15

Androidバイトコード, 9 Androidパッケージファイル, 10

Androidマニフェスト, 16, 56, 71, 74, 76, 115

application要素, 56, 71, 74 argb, 78

ArrayAdapter, 36 BaseAdapter, 36 bindService, 71 BitmapDrawable, 89 BLACK(色), 78 BLUE(色), 78 BMP, 54

BOLD(書体のスタイル), 87

BOLD_ITALIC(書体のスタイル), 87 Bornstein, Dan, 9

BREW, 9

BroadcastReceiver, 16, 74 Browser, 113

Bundle, 59 Button要素, 26 Canvas, 79 category要素, 69 check, 34

CheckBox要素, 31

ClassCastException, 105 close, 85, 108, 118 Color, 78

color(リソースのタイプ), 20 color要素, 22

commit, 105 connect, 116

ContentProvider, 16 ContentValues, 108 Context, 78, 98, 100, 102 create, 86

cubicTo, 85 Cursor, 108 CYAN(色), 78 d, 14

Dalvik VM, 9

Dalvik実行可能形式ファイル, 9, 10 data要素, 69

DBMS, 107

decimal(エディットテキスト), 29 DEFAULT(書体), 86

Dialog, 47

DialogInterface.OnClickListener, 49 dimen(リソースのタイプ), 20

dimen要素, 23 disconnect, 116 DKGRAY(色), 78 dp(大きさの単位), 24 draw, 90

drawCircle, 80, 82 drawLine, 82 drawOval, 82, 83 drawPath, 84 drawRect, 82, 83 drawRoundRect, 82, 83 drawText, 86

drawTextOnPath, 88 Eclipse, 10

の使い方, 11 Eclipse Foundation, 10 edit, 104

EditText要素, 28 execSQL, 108

FileInputStream, 100 fileList, 102

FileOutputStream, 98 FILL, 82

FILL_AND_STROKE, 82 fill_parent(大きさ), 42

fill_parent(ウィジェットの大きさ), 18 findViewById, 26, 27

finish, 62 getAction, 91 getAdapter, 37 getBoolean, 59, 105 getBooleanArray, 59

getCheckedRadioButtonId, 34 getColor, 78

getColumnIndexOrThrow, 109 getContentResolver, 112 getDrawable, 89

getExtras, 59 getFloat, 105 getGroupId, 53 getHeight, 81

getInputStream, 116, 118 getInt, 59, 105, 109 getIntArray, 59

getIntent, 59 getItem, 37 getItemId, 53 getLong, 105

getOutputStream, 118 getReadableDatabase, 108 getResources, 78, 89 getSharedPreferences, 104 getString, 59, 105, 109 getStringArray, 59 getText, 29

getTitle, 53 getWidth, 81

getWritableDatabase, 108 getX, 91

getY, 91 GIF, 54

GLSurfaceView, 95

GLSurfaceView.Renderer, 95 Google, 9, 10

GRAY(色), 78 GREEN(色), 78

horizontal(ラジオボタンの方向), 34 horizontal(リニアレイアウトの方向), 43 HTTP, 115

HttpURLConnection, 115 ID

ウィジェットの , 25

選択されたラジオボタンの , 34 IDE, 10

ImageView要素, 55 in(大きさの単位), 23 insert, 108

Intent, 56

intent-filter要素, 69 IntentFilter, 69 invalidate, 91 isChecked, 32

ITALIC(書体のスタイル), 87 Java, 9

Java VM, 9 javac, 9 JDK, 10 JPEG, 17, 54

KEYCODE_0(キーコード), 93 KEYCODE_A(キーコード), 93

KEYCODE_DPAD_DOWN(キーコード), 93

索引 125 KEYCODE_DPAD_CENTER(キーコード), 93

KEYCODE_DPAD_LEFT(キーコード), 93 KEYCODE_DPAD_RIGHT(キーコード), 93 KEYCODE_DPAD_UP(キーコード), 93 KEYCODE_ENTER(キーコード), 93 KEYCODE_SPACE(キーコード), 93 KeyEvent, 93

Khronos Group, 95 LENGTH_LONG, 46 LENGTH_SHORT, 46 LinearLayout要素, 43 lineTo, 84

Linux, 9 ListView, 36 Log, 14 LogCat, 14 LTGRAY(色), 78 MacOS, 9

MAGENTA(色), 78 makeText, 45 map要素, 104 Menu, 52 MenuItem, 53 MIMEタイプ, 67 mm(大きさの単位), 23

MODE_PRIVATE(ファイル作成モード), 98, 104

MONOSPACE(書体), 86 monospace(フォント), 18 MotionEvent, 91

moveTo, 84 moveToFirst, 109 moveToNext, 109 name属性, 19, 20, 22, 23 NORMAL(書体のスタイル), 87 onActivityResult, 62

onBind, 71

onClick, 27, 49, 51 OnClickListener, 27 onCreate, 108

onCreateOptionsMenu, 52 onDraw, 79, 91

onDrawFrame, 95 onItemClick, 37

OnItemClickListener, 37 onItemSelected, 40

OnItemSelectedListener, 40 onKeyDown, 93

onKeyUp, 93

onNothingSelected, 40 onOptionsItemSelected, 53 onReceive, 74

onStartCommand, 71 onSurfaceChanged, 96 onSurfaceCreated, 95 onTouchEvent, 91 openConnection, 115 openFileInput, 100 openFileOutput, 98 OpenGL ES, 95 Paint, 80 Paint.Style, 82 parseColor, 78 Path, 84 PNG, 17, 54

pt(大きさの単位), 23 put, 108

putBoolean, 104 putExtra, 58, 59, 62 putFloat, 104 putInt, 104 putLong, 104 putString, 104

px(大きさの単位), 23 query, 108, 112

R.java, 17, 21 RadioButton要素, 33 RadioGroup要素, 34 rCubicTo, 85

receiver要素, 74, 76 RectF, 83

RED(色), 78

resources要素, 19, 22, 23 RESULT_CANCELED, 62 RESULT_OK, 62 rgb, 78 rLineTo, 84 rMoveTo, 84

sans(フォント), 18 SANS_SERIF(書体), 86 saveBookmark, 113 sendBroadcast, 73

SERIF(書体), 86 serif(フォント), 18 Service, 16, 71 setAdapter, 37

setBackgroundColor, 78 setBounds, 90

setColor, 80

setConnectTimeout, 115 setContentView, 78

setDropDownViewResource, 40 setFocusable, 93

setFocusableInTouchMode, 93 setItems, 50

setMessage, 47

setNegativeButton, 47 setNeutralButton, 47 setOnClickListener, 27 setPositiveButton, 47 setReadTimeout, 116 setRenderer, 95 setRequestMethod, 115 setResult, 62

setSelection, 40 setShortcut, 53 setStrokeWidth, 82 setStyle, 82 setText, 21, 26, 29 setTextSize, 86 Settings, 77 setTitle, 47 setTypeface, 86

SharedPreferences, 104

SharedPreferences.Editor, 104 show, 46, 47

simple_list_item_1, 37

simple_spinner_dropdown_item, 40 simple_spinner_item, 39

Socket, 118

sp(大きさの単位), 24 Spinner, 39

SQLite, 107

SQLiteOpenHelper, 107 SQL文, 108

startActivity, 67, 73

startActivityForResult, 56, 73 startService, 71, 73

string(リソースのタイプ), 20 string要素, 19, 104

STROKE, 82

Sun Microsystems, 10 Symbian, 9

TableLayout要素, 44 TableRow要素, 44 TextView, 26

TextView要素, 22, 24 Toast, 45

top(エディットテキスト), 28 toString, 29, 36, 39

TRANSPARENT(色), 78 Typeface, 86

UnknownHostException, 121 URI, 67

ブックマークの , 111 URL, 115

URL, 115

URLConnection, 115

vertical(エディットテキスト), 28 vertical(ラジオボタンの方向), 34 vertical(リニアレイアウトの方向), 43 View, 26, 77, 91, 93

WHITE(色), 78 Windows, 9

Windows bitmap, 54 Windows Mobile, 9

wrap_content(大きさ), 42

wrap_content(ウィジェットの大きさ), 18 XML文書, 17

x軸, 80

YELLOW(色), 78 y軸, 80

アクション, 67, 91 の識別, 91

アクティビティー, 11, 15, 16, 69 の結果, 62

の終了, 62 値

拡張データの , 58 アダプター, 36, 39

スピナーのための , 39 リストビューのための , 36 アップグレード

データベースの , 108 アプリケーション

の実行, 12 アプリケーション名, 11 アラートダイアログ, 47

索引 127 リストを持つ , 50

アルファ値, 22, 78 暗黙的インテント, 67 イタリック, 86, 87 位置

の取得, 91

ビットマップ画像の , 90 移動

カレントポイントの , 84 イベント, 27

イベントリスナー, 27 の設定, 27 の作り方, 27 スピナーの , 40 ダイアログの , 49 リストビューの , 37 イメージビュー, 54

色, 17, 22, 80 の記述, 22

のリソースファイル, 22 をあらわす整数, 78 を設定する属性, 22 インストール

Androidアプリケーションの , 15

インターネット, 115 インチ, 23

インテント, 55, 62 の取得, 59 インテントフィルター, 69 ウィジェット, 13, 17

のID, 25

の大きさを設定する属性, 18 のクラス名, 26

の取得, 26 の作り方, 17 の名前, 25

エディターオブジェクト, 104 エディットテキスト, 17, 28 円, 82

大きさ, 17, 24 の記述, 23 の単位, 23

のリソースファイル, 23

ウィジェットの を設定する属性, 18 ビットマップ画像の , 90

ビューの , 81

文字の を設定する属性, 24 レイアウトの , 42

カーソル, 108, 112 解像度, 24

書き込み

ファイルへの , 98 拡張データ, 58

の値, 58 の値の取得, 59 のキー, 58 の登録, 58 の取得, 59 カスケード

メソッド呼び出しの , 47 画素, 24

画像, 17 仮想マシン, 9 カテゴリー, 67 角

の丸い長方形, 82 画面, 16

カレントポイント, 84 の移動, 84 キー, 93

拡張データの , 58 キーコード, 93

記述

色の , 22 大きさの , 23

リソースを参照する , 19 キャンバス, 79, 80

行, 44 強制的な

再描画, 91 曲線

の追加, 85

組み込みコンテントプロバイダー, 111 クラス名

ウィジェットの , 26 クラスライブラリ, 10 グラフィックス

の描画, 79 クローズ, 118 形状

を閉じる, 85

を描画するメソッド, 82 結果

の設定, 62

アクティビティーの , 62 結果コード, 62

原点, 80 肯定ボタン, 47 項目

メニューの の追加, 52 コンタクトリスト, 111

コンテントプロバイダー, 16, 111 コンテントリゾルバー, 111

コンパイラ, 9, 10 コンポーネント, 15 サービス, 15, 16, 69, 70 サーフェス, 95

サーフェスビュー, 95 再描画

強制的な , 91 削除

Androidアプリケーションの , 15

作成

プロジェクトの , 11 座標系, 80

サンセリフ, 86 シェル

Androidエミュレーターの , 15 式

リソースを参照する , 21 識別

アクションの , 91 システム設定値, 111 実行

アプリケーションの , 12 シャープ, 22

終了

アクティビティーの , 62 出力ストリーム, 98

取得

位置の , 91 インテントの , 59 ウィジェットの , 26 拡張データの値の , 59 拡張データのマップの , 59 ビットマップ画像の , 89 ショートカットキー

の設定, 53 初期設定

ラジオグループの , 34 書体, 86

のスタイル, 86 スタイル, 80

書体の , 86 描画の , 82 スピナー, 39

のイベントリスナー, 40 のためのアダプター, 39 整数

色をあらわす , 78 絶対座標, 84

絶対レイアウト, 42, 44 設定

イベントリスナーの , 27 結果の , 62

ショートカットキーの , 53 デフォルトの項目の , 40 ビューの , 78

セリフ, 86 線, 82

の幅, 82 選択されたラジオボタン

のID, 34 相対座標, 84 ソース

の編集, 13 属性

色を設定する , 22

ウィジェットの大きさを設定する , 18

フォントを設定する , 18 文字の大きさを設定する , 24 文字列を設定する , 18 ソケット, 118

ダイアラー, 69 ダイアログ, 47

のイベントリスナー, 49 タイムゾーン, 76

楕円, 82 タグ, 14 タッチ, 91 単位

大きさの , 23 チェック

の判定, 32 チェックボックス, 17, 31 中立ボタン, 47

長方形, 82

角の丸い , 82 直線, 82

の追加, 84 追加

曲線の , 85 直線の , 84

メニューの項目の , 52 通話ログ, 111

使い方

Eclipseの , 11 作り方

イベントリスナーの , 27 ウィジェットの , 17 ビューの , 77

ブロードキャストレシーバーの , 74 レイアウトの , 42

ディレクトリ, 11 データ, 67