VC++2005 メール送信プログラムが正しく動かず困っています – プログラミング – Home

VC++2005 メール送信プログラム...
 
通知
すべてクリア

[解決済] VC++2005 メール送信プログラムが正しく動かず困っています


Telfair
 Telfair
(@Telfair)
ゲスト
結合: 16年前
投稿: 6
Topic starter  

VC++2005 メール送信プログラムが正しく動かず困っています。。。

開発環境:Windows XP sp3 / Visual C++ 2005

以下のソースでメール送信を行うと、送信は出来るのですが
受信したメッセージが 「件名なし&本文文字化け」 となってしまいます。
(※変数の型や格納値には問題ないことを確認済みです)

//--------------------------------------------(抜粋ここから)
CMimeMessage msg;
BOOL bSetSbj;
BOOL bAddTxt;

msg.AddRecipient( szToAddr, NULL, 50221 );
msg.SetSender( szFromAddr );
bSetSbj = msg.SetSubject( szSubject );
bAddTxt = msg.AddText( szBodyMessage );

CSmtpConnection con;
con.Connect( szSmtpSvr );
con.SendMessage( msg );
//--------------------------------------------(抜粋ここまで)

bSetSbj には FALSE(0)が返ってきます。。。
なぜうまくいかないのか不明です。

bAddTxt にはTRUE(1)が返ってきますが、受信メールは文字化け状態です。
(ソースのほかの箇所で文字コードの設定等していません)

なお、コードページ番号として使用している「50221」は
参考にしたソースが使用していた値のため根拠不明です。
(参考ソースではこれで正常に送信出来ています)

解決方法、ご存じありませんでしょうか??


引用未解決
トピックタグ
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

関連リンク
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1225461237


返信引用
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

参考にしたソースって?
俺は50221すら指定していないサンプルしか見つけてないけど。


返信引用
Telfair
 Telfair
(@Telfair)
ゲスト
結合: 16年前
投稿: 6
Topic starter  

>wclrp ( 'o')さん
業務用アプリの一部なんです。
参考にしたソースは社内のソースなのでネット上には置いてないんです。


返信引用
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
 

試してみましたが、普通に文字化けせずに受信できましたよ。
お宅のSMTP/POP3サーバがコードページ50221に対応してないのでは?
コードページの指定やめてみたら?

コードページ50221はWindowsフォーマットのようなので、
LinuxなどWindows以外のメールサーバだと駄目かもという話ね。

ちなみに、コードページ50221の解説です。
-----------------------------------------
[コードページ 50221]
Microsoft Windowsで使われている、ISO-2022-JPの亜種の一つ。
ISO-2022-JPに対し、CP932全文字(重複を除くWindows-31Jの文字)が扱えるよう拡張をし
た符号である。
Microsoft Outlook Express、Internet Explorerなどで使われている。
-----------------------------------------


返信引用
Telfair
 Telfair
(@Telfair)
ゲスト
結合: 16年前
投稿: 6
Topic starter  

>bunさん
わざわざ確認までしていただきありがとうございました。
コードページの指定を外して再確認してみましたが、
やはり件名なし&文字化けになってしまいます。。。
これからVCの設定なども見直してみます。


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

受信したメールが読めるかどうかはメールクライアントにもよるので
パケットモニターやメールクライアントの機能などを使って
ほんとにエンコードできているかどうかをまず確認した方がよさそうです。

SetSubjectとAddTextメソッドの方も引数にコードページの指定があるので
こっちも設定しないといけないのかもしれません。
#エンコードが正しくできたとしても
#CMimeMessage がちゃんとヘッダーを作ってくれるかどうか怪しいですが・・


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

CMimeMessage::SetSubject って使えるんですか?
メンバ一覧にないんですけど。
http://msdn.microsoft.com/ja-jp/library/xz2741yh.aspx

CMimeHeader::SetSubject ならありますね。
http://msdn.microsoft.com/ja-jp/library/sfh7tfsb.aspx

試してないので推測ですが、ひょっとして、過去のバージョンとの互換性のためにあるダ
ミーメソッドで、常に FALSE を返すように実装されていたりして?


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

ごめん、CMimeMessage は CMimeHeader を継承してますね。
投稿した後で「もしかして…!」って思ったけど遅かったです。恥ずかしい。


返信引用
Telfair
 Telfair
(@Telfair)
ゲスト
結合: 16年前
投稿: 6
Topic starter  

自己解決してしまいました、すみません。。。

CoInitialize()を呼び出していなかったのが原因でした。

---< 以下引用 >---------------------------------------------------------
CoInitialize() 関数は、CoCreateInstance() を呼び出す前に、1回だけ呼び出す必要が
あります。

COM を扱うようなプロジェクトの場合は CoInitialize() を呼び出すコードが自動的に用
意されるようですけど、Win32 コンソールに ATL をサポートさせたときには、自分で呼
び出す必要があるようです。
---< 引用元 >-----------------------------------------------------------
http://program.station.ez-net.jp/memorandum/VC/7/com-create.asp

みなさん、親身な回答ありがとうございました m(_ _)m


返信引用
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
 

あれ...

実は私もそれと同じようなことを思ったんですね。
で、AfxOleInit()の呼び出しをわざとやめてみたんですね。

すると、文字化けどころか、メール送信そのものができなく
なりました(正確には一般保護違反)。
なので、その線はないかと思っていたんですが、

中間的な状態が存在したんですね。
・メール送信 → 送信OK
・文字化け → 起こる

なんにせよ、解決してよかったです(^-^)


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました