スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

iOS用メールライブラリを公開しました

iPhoneアプリにおけるメーラアプリは、実はあまり多くありません。(標準メーラと連携するアプリが殆どです)
これには多少なりとも理由がありまして、その1つにメール機能をサポートするiOS用ライブラリが殆ど世の中に出ていないという理由があります。有名なところでは「MailCore」というライブラリがありますが、こちらは2009年で開発がストップしているのと、日本語には全く対応していないため日本人には利用できません。
GitHubで現在も開発が続いているようです。こちらは日本語も可能なようですが、独特の使いにくさは残ったままのようです

その他の理由としては、そもそも標準メーラで満足な人が多いことや、海外ではデコメの文化もないため、あまりこのあたりを気合入れて作っている人がいないという理由もあります。

このような背景があるため、iOSでSMTPやIMAPなどを実装することは非常に難しくなっています。
とはいえ、日本においてフィーチャーフォンユーザがスマートフォンに流れてくることを考えると、デコメールの利用者も流れてくることは間違いありません。そうなると、今後標準にはないデコメ機能をサポートしたメーラの需要というのはそこそこ増えるのではと考えられます。


JavaにはJavaMailという便利なライブラリがあります。
これはメール送信・受信やMIMEパートの構築などのほとんどの機能をサポートしており、非常に高機能です。iOSでもこれが使えればな・・・と思って、今回作成したのが「FrontierMail」というライブラリです。

[FrontierMail]
https://github.com/k-kou/FrontierMail


ベースは libEtPan というライブラリを使っており、これをObjective-Cでラップして、更にJavaMailよりも簡単に利用できるように設計してあります。

まだSMTP機能とMIMEパート構築しかサポートしていないため、詳細な利用方法は上記githubにアップロードしてあるOCUnitのテストコードや、APIドキュメントを参考にしてみてください。
スポンサーサイト

コメントの投稿

非公開コメント

No title

MailCore は開発が続いているようにみえるのですが、これとは別物でしょうか?https://bitbucket.org/mronge/mailcore/
確認せずに言って申し訳ないのですが、MailCore は reMail というプロジェクトでも利用されており、こちらは日本語も通っているので、日本語も使えるのではないでしょうか?

便利なライブラリが増えるのは嬉しいです。がんばってください。

Re: No title

はじめまして。コメントありがとうございます。

> MailCore は開発が続いているようにみえるのですが、これとは別物でしょうか?https://bitbucket.org/mronge/mailcore/

おお、ホントですね。
私がみていたMailCoreはこちら↓だったのですが、GitHubに移行してたんですね・・・。
http://www.mronge.com/m/MailCore/

確かにGitHubのMailCoreのソースを見る限りだと
日本語も使えるようになっていますね。
こちらこそ確認不足ですみません。記載修正しておきます。

No title

以下のframeworkが見当たらないのですが、本ライブラリダウンロード後何かしらの作業が必要でしょうか?

libEtPan/build-mac/build/Debug-framework/libetpan.framework

初歩的な質問で申し訳ありません。

Re: No title

コメントありがとうございます。

> 以下のframeworkが見当たらないのですが、本ライブラリダウンロード後何かしらの作業が必要でしょうか?
>
> libEtPan/build-mac/build/Debug-framework/libetpan.framework
>

申し訳ございません。
上記ディレクトリが gitignore されていてpush出来ていませんでしたので
再度pushし直しました。
お手数をお掛けしますが、ご確認をお願い致します。

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

No title

すいません。
未だ下記ディレクトリが見当たりませんが.....

libEtPan/build-mac/build/Debug-framework/libetpan.framework

Re: No title

> すいません。
> 未だ下記ディレクトリが見当たりませんが.....
>
> libEtPan/build-mac/build/Debug-framework/libetpan.framework

申し訳ないです。
一度リポジトリを再作成した際にまたプッシュ対象からignoreされてました・・・。
再度プッシュしておきました。

FrontierMail.frameworkについて

非常に基本的な事で申し訳ございません。

FrontierMail.frameworkをXcodeでFrameworkとして取り込んだのですが#import <FrontierMail/FrontierMail.h>を記載すると実態がないとエラーが表示されてしまいます。
確かにFrameworks内のFrontierMail.frameworkを見ると中身がないように思われます。

大変お手数ではございますがご教示頂きたくお願い致します。

セッション切れチェック

はじめまして。FrontierMailを使わせていただいております。
sendMailMessageでメールを送信した際、タイムアウトでセッションが切れていると10分程経過してからエラーが返ります。この10分待ちは辛いので、セッション切れのチェックはできないものでしょうか。

Re: セッション切れチェック

コメントありがとうございます。
ご返信遅れて申し訳ございません。

セッション切れチェックについてですが、
利用しているlibEtPanというライブラリ内で特に処理されていないようなので、
現在のFrontierMailとしては対応が難しい状態です。申し訳ございません。

今後のバージョンアップで、
通信処理をlibEtPanを使わないで全てFrontierMailとして作成し直す予定ですので
その際に対応させて頂きたいと思います。

Re: セッション切れチェック

ご回答ありがとうございます。
現在はできないとのことですので、今後のバージョンアップに期待致します。

No title

はじめまして、githubからFrontierMail-master.zipをダウンロードして使わせて頂こうと思ったのですが、
FrontierMail/build/Debug-framework/FrontierMail.framework をフレームワークとして追加したところframework not found FrontierMailとリンクエラーが出てしまいます。
Frameworkのアイコンにはなっていますが、中身はカラでHeaderも無いようです。

FrontierMail.frameworkのディレクトリを見るとVersions/A/Headers などがあることは確認できます。
Xcode4.5.2では使用できないのでしょうか?
よろしくお願いします。

Subjectに絵文字で落ちる

はじめまして。ynoseと申します。
FrontierMailを使わせて頂いているのですが、メールのSubjectに絵文字を含むと
FRMailUtils.mのcStringEncodingMimeHeader:メソッドで[string cStringUsingEncoding:NSISO2022JPStringEncoding];の結果が
0x00000000となってしまい、
その次のencode_base64(strSource, strlen(strSource));で落ちてしまいます。
NSUTF8StringEncodingなど色々試しているのですが文字化けしてしまい、うまくいきません。
よい解決策はないでしょうか?

Re: No title

> HTさま
遅レスで大変申し訳ございません。
こちらですが、libetpanからライブラリを再度ビルドして頂くことで対応できるかと思いますが、
現状こちらのバージョンはメンテしておらず、
libetpanを利用しない別バージョンを開発中になりますので、
もしlibetpanを自力でビルドすることが難しいということでしたら、
お時間を頂いてしまうかと思いますが現在開発中のバージョンのリリースまでお待ち頂けると幸いです。

Re: Subjectに絵文字で落ちる

> ynose さま
コメントありがとうございます。
絵文字が変換出来ない件につきましては、
ISO2022-JPへ変換できない文字コードであるために失敗しているのだと思われます。

絵文字については現在のFrontierMailのバージョンでは
申し訳ないことに考慮されていない実装となっております。
リリース時期は未定ですが、次期バージョンまでには何かしら対応をさせて頂こうかと思います。

サンプルコードの場所を教えていただけますか?

iPhoneからメール送信を探していてたどり着きました。
仕様など見ました。素晴らしいです。私の求めていたものです。

>まだSMTP機能とMIMEパート構築しかサポートしていないため、詳細な利用方法は上記
>githubにアップロードしてあるOCUnitのテストコードや、APIドキュメントを参考にして
>みてください。
とありましたので、OCUnitのテストコードを参考に実装しようと思いましたが、OCUnitが見つかりませんでした。
申し訳ないのですが、『OCUnitのテストコード』の場所をお教えいただけますか?

初歩的な質問で申し訳ありませんが、よろしくお願いいたします。

Re: サンプルコードの場所を教えていただけますか?

コメントありがとうございます。
すみません。わかりづらい書き方になっていましたが、
OCUnitのテストコードというのは標準のテストコードのことで、パスでいいますと以下になります

<pre>
FrontierMail / FrontierMail / FrontierMailTests / FrontierMailTests.m
</pre>

現状SMTPのみしかサポートしていないライブラリですが、
今後はIMAPやPOP3にも対応予定でおります。

Re: サンプルコードの場所を教えていただけますか?

Kou様
回答有難うございます。

場所わかりました。ありがとうございます。

早速プロジェクトに取り込んだのですが、1点質問がございます。
以下の手順で取り込みましたがコンパイルエラーが出てしまいます。
・新規でプロジェクトを作成しBuild Phases - Link Binary With Librariesに
 FrontierMail.Framework
 libetpan.framework
 を追加
・ViewController.mに
  #import <FrontierMail/FrontierMail.h>を追記
  ご教授して頂いたFrontierMailTests.mからMAIL_FROM_NAMEなどの定数を追記
  同じくFrontierMailTests.mからtestSMTPSendPlainTextメソッドを追記

上記の状態でBuildいたしますとコンパイルエラーが発生します。エラーは以下の通りです。
 No known class method for selector 'mailAddressWithName:address:'
 No known class method for selector 'mailAddressWithName:address:'
 No known class method for selector 'smtpWithConnectionType:hostAddress:portNo:'

どこか導入手順に誤りがあるのでしょうか。
お手数ですが、ご教授願えますでしょうか。

なお、ViewController.mには上記以外の追記はございません。

度々初歩的な質問で申し訳ありませんが、よろしくお願いいたします。

本文と画像の送信について

度々失礼いたします。

2013-10-07(12:30)のコメントについてですが、無事にメール送信することができました。
ですので、回答は必要ありません。お騒がせしました。
本来であれば私の方でコメントを削除するべきでしたが、私から削除ができませんでしたので、コメントさせていただきます。

さて、タイトルにある『本文と画像の送信について』ご質問があります。
・本文があるメールに画像ファイル(jpeg)を添付したメール送信は可能でしょうか?
 本文の送信と画像(jpeg)のそれぞれの送信は成功しましたが、本文と画像の両方を送信しようとすると、件名なしかつ添付ファイルなしのメールとなります。

本文と画像の両方を送信した実装は以下の通りです。

// 本文を設定する
[mimeTextPart setText:MAIL_MESSAGE];

// ファイルタイプをJPEGにする
[mimeTextPart setContentTypeWithMimeType:FRMimeTypeJPEG];
// テスト画像を生成する
UIImage *image = [UIImage imageNamed:@"test.jpg"];
NSData *data = UIImageJPEGRepresentation(image, 0.8f);
// テスト画像を設定する
[mimeTextPart setContent:data];
// ファイル名を設定する
[mimeTextPart setFileName:@"test"];


// メールメッセージへMIME情報を設定する
[message setMimePart:mimeTextPart];

// SMTPセッションを作成する
FRSMTPSession* session = [FRSMTPSession
smtpWithConnectionType:FRSMTPConnectionTLS
hostAddress:SMTP_HOST
portNo:SMTP_PORT_NO];

// セッションへ接続する
[session connect:SMTP_ACCOUNT password:SMTP_PASSWORD];

// メールを送信する
[session sendMailMessage:message];

}

お手数ですがご教授お願いいたします。

Re: 本文と画像の送信について

コメントありがとうございます。
ご質問いただいた件についてですが、画像とテキストを併せて送信することは可能です。
メールにおいて画像とテキストを送信する場合、マルチパートのMIME情報を構成する必要がございます。
FRMimePartクラスにおいて addMimePart というメソッドがあるのですが、
こちらがマルチパートのMIME情報を構成するためのメソッドになります。

マルチパートのMIME情報の構成については
一般的な形式に加えて、携帯電話の各キャリアによって解釈の仕方が異なります。
以下のサイト様で詳しく解説されておりますのでご参考にしてください。
http://d.hatena.ne.jp/ttshrk/20110331/1301596020

上記のサイト様において、multipart/alternative や multipart/related という指定がありますが、
これをFRMimePartクラスのsetContentTypeWithMimeTypeメソッドで指定します。
(既に定数として用意されております)

例えば、こちらの形式の場合ですと
multipart/mixed
├ multipart/alternative
│ ├ text/plain
│ └ text/html
└ image

以下のようなコードになります。

FRMimePart* mimeMultiMixed = [FRMimePart mimePart];
FRMimePart* mimeMultiAlt = [FRMimePart mimePart];
FRMimePart* mimeTextPart = [FRMimePart mimePart];
FRMimePart* mimeHtmlTextPart = [FRMimePart mimePart];
FRMimePart* mimeAttachImagePart = [FRMimePart mimePart];

// Content-Typeを設定する
[mimeMultiMixed setContentTypeWithMimeType:FRMimeTypeMultipartMixed];
[mimeMultiAlt setContentTypeWithMimeType:FRMimeTypeMultipartAlternative];
[mimeTextPart setContentTypeWithMimeType:FRMimeTypeTextPlain];
[mimeHtmlTextPart setContentTypeWithMimeType:FRMimeTypeHtml];
[mimeAttachImagePart setContentTypeWithMimeType:FRMimeTypeJPEG];

// 各MIMEパートを構成する
[mimeMultiAlt addMimePart:mimeTextPart];
[mimeMultiAlt addMimePart:mimeHtmlTextPart];
[mimeMultiMixed addMimePart:mimeMultiAlt];
[mimeMultiMixed addMimePart:mimeAttachImagePart];

/* (各MIMEパートへテキストや画像を設定する。テキストの指定は省略) */

// 画像情報(添付)を設定する例
[mimeAttachImagePart setContentType:@"image/jpeg"];
[mimeAttachImagePart setContent:imageData]; // NSData型の画像バイナリを指定
[mimeAttachImagePart setDispositionType:FRMimeDispositionAttachment]; // Content-Dispositionで添付ファイルとして指定
[mimeAttachImagePart setFileName:@"添付ファイルです.jpg"];

// メールメッセージへMIME情報を設定する
[message setMimePart:mimeMultiMixed];



あとは上記のメール情報を送信すればOKです。
走り書きでコードを書いたのでどこか間違っていたらすみません。

Re: Re: 本文と画像の送信について

返信遅れて申し訳ありません。
画像とテキストを併せて送信は、無事にできました。

本当にありがとうございました。

BSD Licenseについて

「FrontierMail」についてご質問があります。

こちらのサイトに
[FrontierMail]
https://github.com/k-kou/FrontierMail

【ライセンスについて】
本ライブラリは BSD License で配布しております。

とありました。
BSD License での配布とはどのようにするのでしょうか?

他のサイトで調べてみますと、

著作権表示/BSDライセンス条文/無保証の旨を記載すれば、自由に使えるライセンス

とありましたが、
配布時に具体的に何をしたらいいかわかりません。

申し訳ないのですが、iPhoneアプリで配布時にするべき手順などをまとめたページがございましたら、教えていただけないでしょうか?

よろしくお願いいたします。

Re: BSD Licenseについて

ご返信が遅れてしまい、大変申し訳ございません。

BSDライセンスはおっしゃるとおり、
著作権表示の記載さえあれば自由に転用可能なライセンスです。
FrontierMailの場合、ソースコードのヘッダに著作権表示のコメントが記載してありますが、
その元のコメントさえ消去しなければ、ソースの改変・流用は自由ということになります。

そのため、例えばFrontierMailを使用したアプリケーションをリリースしたとして、
そのアプリケーションのリリースノートにFrontierMailを使った等の一文を加える必要もございません。
あくまで、FrontierMailに関してはソースコードレベルの著作権表示としてBSDライセンスを適応しております。
プロフィール

Author:Kou
モバイル関連の開発ばかりやってる人のブログです。たまにWebもやります。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。