The project of U-WA-
http://uwa.potetihouse.com/
トップページ > 過去ログ > 記事閲覧
アイコン デコメ登録
日時: 2011/03/17 15:49
名前: WWW

現在ブログサイト(PHP)の投稿システムを作っています。
流れとしてはユーザーさんが特定のアドレスにメールで送信し
そのメールサーバーをVBのプログラムが監視し受信した内容を
登録するというプログラムを実装しているのですが、
デコメを含んだメールの場合デコメは添付ファイルとして取得し
本文はデコメを空白に置き換えた状態で取得していて、
デコメを含んだ状態の内容がDBに登録できません。

理想としてはデコメをIMGタグに変換をしブログサイト上では
ユーザーさんが投稿した内容のまま表示したいのですが、
TKMPではデコメの対応はできないのでしょうか?

Page: 1 |

ファイル Re: デコメ登録 ( No.1 )
日時: 2011/03/18 23:04
名前: Toki◆pRU.c9X.EOI
参照: http://www.atmarkit.co.jp/fnetwork/rensai/kihon11/01.html

>デコメを含んだメールの場合デコメは添付ファイルとして取得し
>本文はデコメを空白に置き換えた状態で取得していて、
>デコメを含んだ状態の内容がDBに登録できません。

TKMPではサーバーから受信したデータをデコードしているだけなので、
デコメが添付ファイルとし取得されるのならば、
サーバーから受信した時点でそうなっているのだと思われます。

>理想としてはデコメをIMGタグに変換をしブログサイト上では
>ユーザーさんが投稿した内容のまま表示したいのですが、

TKMPではサーバーからの受信処理と、パート毎のエンコード処理までしか行えません。
この処理は、受信したメールデータから解析して再現させることになるので、
この処理を行うのは、WWWさんの作成するプログラムで行う必要があります。

URLの文献が参考になるかもしれません。

ファイル Re: デコメ登録 ( No.2 )
日時: 2011/03/22 19:34
名前: WWW

早速の返信ありがとうございました。

下記のロジックでHTMLメールを取得できました。
本文中のデコメの順番どおりに添付ファイルとしてFileCollectionに格納されている
みたいでしたので順番に置換処理を行い表示することができました。

参考URLも大変助かりました。ありがとうございます。


'--- 添付ファイル保存---
Private Sub PopClient_GetFiles(ByVal MailStream As System.IO.Stream)

Dim reader As New TKMP.Reader.MailReader(MailStream, False)
Dim strTmpFile() As String

If reader.FileCount = 0 Then
System.Windows.Forms.MessageBox.Show("添付ファイルはありません。")
Return
End If

Dim file As TKMP.Reader.File
Dim i As Integer = 1
ReDim strTmpFile(reader.FileCount)
For Each file In reader.FileCollection
'ファイル出力
file.FileSave("c:\data\")
'ファイル名を変更する
System.IO.File.Move("c:\data\" & file.FileName, _
"c:\data\" & Now.ToString("yyyyMMddHHmmss") & "_" & i & System.IO.Path.GetExtension(file.FileName))
strTmpFile(i - 1) = Now.ToString("yyyyMMddHHmmss") & "_" & i & System.IO.Path.GetExtension(file.FileName)
i = i + 1
Next file

Dim strMaindata As String = ""


For i = 0 To reader.PartCollection.Count - 1
For j = 0 To reader.PartCollection.Item(i).PartCollection.Count - 1

If reader.PartCollection.Item(i).PartCollection.Item(j).PartCollection.Count > 0 Then


If reader.PartCollection.Item(i).PartCollection.Item(j).PartCollection.Count >= 2 Then
'HTMLメール
strMaindata = reader.PartCollection.Item(i).PartCollection.Item(j).PartCollection.Item(1).MainText
Else
'TEXTメール
strMaindata = reader.PartCollection.Item(i).PartCollection.Item(j).PartCollection.Item(0).MainText
End If


End If
Next j
Next i

End Sub
ファイル Re: デコメ登録 ( No.3 )
日時: 2011/03/23 22:48
名前: WWW

先日の投稿したロジックですとキャリアによって取得できてませんでした。

下記のHTMLメールかどうかの判定をするループを下記の内容に変更したら3キャリアで
双方取得することができました。


For i = 0 To reader.PartCollection.Count - 1
For j = 0 To reader.PartCollection.Item(i).PartCollection.Count - 1

If reader.PartCollection.Item(i).PartCollection.Item(j).PartCollection.Count > 0 Then


If reader.PartCollection.Item(i).PartCollection.Item(j).PartCollection.Count >= 2 Then
'HTMLメール
strMaindata = reader.PartCollection.Item(i).PartCollection.Item(j).PartCollection.Item(1).MainText
Else
'TEXTメール
pStrBody = reader.PartCollection.Item(i).PartCollection.Item(j).PartCollection.Item(0).MainText
End If

Exit For

Else
If reader.PartCollection.Item(i).PartCollection.Count >= 2 Then
'HTMLメール
strMaindata = reader.PartCollection.Item(i).PartCollection.Item(1).MainText
Else
'TEXTメール
pStrBody = reader.PartCollection.Item(i).PartCollection.Item(0).MainText
End If

Exit For

End If
Next j
Next i

Page: 1 |