OpenPop.NET を Xamarin.Forms で使う

常々、スパムメールが沢山あってスマホでメールが受け取れないのにイライラしている訳だが。スマホで閲覧するときは、全てを受け取りたいのではなくて重要そうな(最初に決められた相手とか)メールだけ見たいので、スパムもそうだけど広告メールも外したかったりする。いわゆる、自分なりのホワイトリストが作っておきたい。

つまりは自前のメーラーアプリがあればいいのだけど、(確か)iOSの場合は規約上作れないのでストアには出て来ない。
ならば、作ればいいだろう、ということ。

OpenPop.NET

簡単なPOP3の実装ならばそれほど難しくはないのだけど、できるならば既に実績があるものがよい。

OpenPop.NET – Robust POP3 client and MIME parser written in C#
http://hpop.sourceforge.net/

どうやら .NET Framework 2.0 の頃からある古い実装なのだけど、サンプルもあるのでそのまま使えそう。

ってなわけで、.NET Standard 2.0 でビルドし直してみる、と

moonmile/hpop: OpenPOP.NET code repository
https://github.com/moonmile/hpop

あっさりできてしまったので、これを Xamarin.Forms に組み込む。

Xamarin.Forms+OpenPop.NET

[code lang=”csharp”]
using OpenPop.Pop3;
using System.Net.Mail;

public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
this.LayoutChanged += MainPage_LayoutChanged;
}

private void MainPage_LayoutChanged(object sender, EventArgs e)
{
var client = new Pop3Client();
client.Connect(“ホスト名”, 110, false);
client.Authenticate(
“ユーザー名”,
“パスワード”,
AuthenticationMethod.UsernameAndPassword);
int messageCount = client.GetMessageCount();

var items = new List();
int cnt = 0;
for ( int i = messageCount; i>0; i– )
{
/// 30 件で区切る
if (cnt++ >= 30) break;

try
{
var msg = client.GetMessage(i);
if (msg != null)
items.Add(msg.ToMailMessage());
}
catch { }
}
this.lv.ItemsSource = items;

}
}
[/code]

途中で try-catch しているのは、Form のコード変換あたりでエラーになっているから。デコードがうまくいかないようなので、ToMailMessageメソッドの実装は自前で行ったほうがよいかもしれない(日本語のコード変換だからだろう)。

ひとまず、ListView にバインドさせるとこんな感じになる。

どうやって使うか?

ちゃんとしたメーラーアプリ標準のものを使う…というか標準のしか使えないので、まるっきり自作アプリとして使う。スマホのメーラーは振り分けが貧弱なので、そのあたりを補えばいい。

  • From を見て、特定の人だけを表示させる
  • Subject に特定の文字がでてきたもののみ表示させる。

な感じでいいだろう。返信するときはコピペしてから標準アプリに受け渡せばいい。

カテゴリー: 開発, C#, Xamarin パーマリンク