Cocoaはやっぱり!
メールを送ってみたりする
今回のテーマ

Cocoaには、Messageというフレームワークが用意されていまして、これを使うと簡単にメールが送れてしまいます。ということで使ってみましょう。

改版履歴

Messageフレームワークの使い方

Cocoaには、Messageというフレームワークが用意されていまして、これを使うと簡単にメールが送れてしまいます。ということで使ってみましょう。

プロジェクトを作ったら、Project Builderの「 プロジェクト > フレームワークを追加... 」メニューを選択して、Message.frameworkを選択します。で、以下の3つのアウトレットと1つのアクションを持つクラスを作ります。

そして、ヘッダーを参照するために以下の1行をフレームワークを使うソースに書きます。

フレームワークのヘッダーインポート : MyClass.m
#import <Message/NSMailDelivery.h>

アクションの中身は以下のようになります。

フレームワークのヘッダーインポート : MyClass.m
NSString *sBody = [ bodyField string ]; // 本文 NSString *sSubject = [ subjectField stringValue ]; // タイトル NSString *sTo = [ toField stringValue ]; // 送信先 BOOL bResult; bResult = [ NSMailDelivery deliverMessage : sBody subject : sSubject to : sTo ];

各ViewからテキストをstringメソッドもしくはstringValueメソッドで取り出して、deliverMessage : subject : to : メソッドでメール送信します。パラメータは、三田とおりですが、「 本文、タイトル、送信先アドレス 」の順です。返り値は、成功したかどうかです。

日本語でも大丈夫なのかが気になるところですが、試した範囲では特に問題ないようです。アルファベットしか使っていない場合と日本語を使っている場合で、エンコード方法が異なっていましたので、含まれている文字コードの範囲を見て、エンコード方式を選んでいるものと思われます。

メールの設定は、システム環境設定の内容を参照しているようです。設定がなされているかどうかをチェックするメソッドもあります。以下のメソッドを呼んでNOが返ってきた時は、設定がなされていないことになります。

メールの環境設定が完了しているかチェック : MyClass.m
bResult = [ NSMailDelivery hasDeliveryClassBeenConfigured ];
非常に簡単ですが、システム環境設定に従いますので、マルチアカウントに対応させたりとかは現状無理のようです。また、受信の機能が無いのも寂しいところです。受信機能があれば、自動転送とか自動返信とかの特殊なメールソフトが簡単に作れるんですけどね。

最後に、日本語のメールを送信した時のメールヘッダーの一部を掲載しておきます。

メールヘッダー
ontent-Type: text/plain; format=flowed; charset=iso-2022-jp X-Mailer: Apple Mail (2.388) Mime-Version: 1.0 (Apple Message framework v388) Content-Transfer-Encoding: 7bit