メール送信について

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: メール送信について

Re: メール送信機能で

by yu0627 » 2005年11月26日(土) 23:12

Bオフィシャルユーザーズガイド3.1.0のテキストエディタを作るで「メール送信機能を作る」に従ってコードを作成しましたが、下記のWindowsのエラーが出てしまいます。Codeは7月4日付のゲストさんが示されているのと同じです。ABのバージョンはは4.11.01です。OSはXp HomeE Sp2 です。
また別の質問ですが Sinryowさんが7月8日に書いておられる変数Recvtempの意味と型と宣言する場所はどこでしょうか?
あぁ、それは僕が個人的にメール送信のログを取るために定義した変数です。関係ないです。
"0x00406544"の命令が0x0016b000のメモリを参照しました。
メモリがreadになることは出来ませんでした。"

接続を繰り返すと数字とreadがwrittenに変わったメッセージが出ます。
たびたびお手数をかけますがお願いいたします。
あまり分かりませんですが、多分アクセス違反でしょうかね。一度コードを見直してください。
あと、あのメール送信サンプルは送信するコマンドがおかしいので...。

メール送信機能で

by 矢田裕康 » 2005年11月26日(土) 22:25

Bオフィシャルユーザーズガイド3.1.0のテキストエディタを作るで「メール送信機能を作る」に従ってコードを作成しましたが、下記のWindowsのエラーが出てしまいます。Codeは7月4日付のゲストさんが示されているのと同じです。ABのバージョンはは4.11.01です。OSはXp HomeE Sp2 です。
また別の質問ですが Sinryowさんが7月8日に書いておられる変数Recvtempの意味と型と宣言する場所はどこでしょうか?

"0x00406544"の命令が0x0016b000のメモリを参照しました。
メモリがreadになることは出来ませんでした。"

接続を繰り返すと数字とreadがwrittenに変わったメッセージが出ます。
たびたびお手数をかけますがお願いいたします。

返信@yu0627

by yu0627 » 2005年7月19日(火) 18:33

> もう一つ修正箇所がありました。(ポカが多いなぁ。笑)
> 他のコードを流用したため、不要な部分がありました。
> そのままでも動くのですが、コードを参考にされる方もいると思いますので、
> 一応書いておきます。
> 2バイト文字の文字コードには、タブのコードが入ることはありませんので、
> IsDBCSLeadByte は、不要です。
そうなんですか。修正しておきます~。

by Abs » 2005年7月19日(火) 10:33

もう一つ修正箇所がありました。(ポカが多いなぁ。笑)
他のコードを流用したため、不要な部分がありました。
そのままでも動くのですが、コードを参考にされる方もいると思いますので、
一応書いておきます。
2バイト文字の文字コードには、タブのコードが入ることはありませんので、
IsDBCSLeadByte は、不要です。

返信@yu0627

by yu0627 » 2005年7月17日(日) 18:44

> もうひとつ抜けがありました。
> 2つ目の Whileブロックの Wend 行の後に、
> pszDest[k] = 0 を追加しといてください。
> ABでは、calloc(APIのラッパ)は、確保したメモリを
> 0クリアするようになっているので、毎回メモリ確保するか
> クリアすれば問題ないですが、そのまま使いまわしたりすると
> エラーになります。(あのコードでは)
ありがとうございました。

by Abs » 2005年7月16日(土) 19:59

もうひとつ抜けがありました。
2つ目の Whileブロックの Wend 行の後に、
pszDest[k] = 0 を追加しといてください。
ABでは、calloc(APIのラッパ)は、確保したメモリを
0クリアするようになっているので、毎回メモリ確保するか
クリアすれば問題ないですが、そのまま使いまわしたりすると
エラーになります。(あのコードでは)

返信@yu0627

by yu0627 » 2005年7月16日(土) 17:31

>メール送信問題は、解決しているので、新たな問題は、
>別に質問を起こしたほうが良いかもしれません。
僕の中では解決していないと思ったからです。

Absさん、ありがとうございました。おかげでうまくいきました。
OEでタブを半角スペースに変換するということはそれなりの理由があるからだと思います。
Mario2さん、Absさんここまで返信していただき、ありがとうございました。

by Abs » 2005年7月16日(土) 12:44

コードとは、関係ないですが、タブは、columnでした。
失礼しました。VBAでもたまに間違えます。(笑)

by Abs » 2005年7月16日(土) 11:32

If n = 0 Then Exit Sub
を、
If n = 0 Then Goto *ExitTag
に変更してください。

by Abs » 2005年7月16日(土) 11:28

以下のサンプルで試してください。
EditBox1 内の文章にタブがあれば空白に変換して更新します。
# メール送信問題は、解決しているので、新たな問題は、
別に質問を起こしたほうが良いかもしれません。

コード: 全て選択

Sub MainWnd_CommandButton1_Click()
	Const NUM_TABROWS = 4
	Dim i As Long
	Dim n As Long
	Dim nLen As Long
	Dim pszDest As *Byte
	Dim pszSrc As *Byte

	nLen = GetWindowTextLength( GetDlgItem(hMainWnd, EditBox1) )
	If nLen = 0 Then Exit Sub
	pszSrc = calloc(nLen + 1)
	If pszSrc = NULL Then Exit Sub
	If GetWindowText(GetDlgItem(hMainWnd, EditBox1), pszSrc, nLen + 1) = 0 Then Goto *ExitTag

	'文章中のタブ数を数える。
	While i < nLen
		If IsDBCSLeadByte( pszSrc ) Then
			i = i + 1
		ElseIf pszSrc = 9 Then
			n = n + 1
		End If
		i = i + 1
	Wend	
	
	If n = 0 Then Exit Sub
	pszDest = calloc(nLen + (n * NUM_TABROWS) + 1)
	If pszDest = NULL Then Goto *ExitTag

	Dim k As Long

	'全ての文章データを、1バイトずつ検証してタブなら半角空白に置き換える。
	i = 0
	While i < nLen
		'全角文字(2バイト)の先頭なら、2バイト分をコピー。
		If IsDBCSLeadByte( pszSrc ) Then
			memcpy(pszDest + k, pszSrc + i, 2)
			k = k + 2
			i = i + 1
		'タブなら、タブの列数分の半角空白をコピー。
		ElseIf pszSrc = 9 Then
			lstrcpy( pszDest + k, String$(NUM_TABROWS, " ") )
			k = k + NUM_TABROWS
		'半角文字なら、1バイト分をコピー。
		Else
			pszDest[k] = pszSrc
			k = k + 1
		End If
		i = i + 1
	Wend

	SetWindowText(GetDlgItem(hMainWnd, EditBox1), pszDest)
	MsgBox 0, Str$(n) + " 個のタブを置き換えました"

*ExitTag
	If pszSrc Then free(pszSrc)
	If pszDest Then free(pszDest)	
End Sub

返信@yu0627

by yu0627 » 2005年7月15日(金) 20:31

返信遅れてすみません。
考えてみたのですが、半角や全角スペースなどは再現されています。
なので、タブはスペース4つ分なのでタブをスペースに変換できたら
いいと思うのですが。
自分の技量ではまだできないのでよければ教えていただきたいです。

by Abs » 2005年7月11日(月) 23:22

再度 OEを復旧して調べてみましたが、仕様のようです。
設定も見ましたが、それらしい物も見つかりませんでした。
"メッセージはすべてテキスト形式で読み取る(R)" を有効にすると、
本文表示欄は、RichEdit20W になり、無効にすると、
Internet Explorer_Server に切り替わります。
なお、OEでタブを入力した場合は、半角空白に変換されていました。

by yu0627 » 2005年7月11日(月) 19:48

> コード変更前に、以下の事を試してみてください。
>
> 1.Outlook Express でタブ入り文章を、テキスト形式で送信する。
> 2.□ メッセージはすべてテキスト形式で読み取る(R) のチェックを外す。
> 3.送ったメールを受信してみる。
>
> サンプルでは、テキスト形式が送信されてない為、
> Outlook Express は、HTMLをデフォルトとして使用するのかもしれません。
早速やってみました。
そうすると、メーラーへの貼り付けの時点でタブの間隔が狭くなり、それを受信するとそのままでした。
なお、そのソースを見ると以下のようになっていました。

MIME-Version: 1.0
Content-Type: text/plain;
format=flowed;
charset="iso-2022-jp";
reply-type=original
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2900.2527
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2527

以上です。

by Abs » 2005年7月11日(月) 19:37

コード変更前に、以下の事を試してみてください。

1.Outlook Express でタブ入り文章を、テキスト形式で送信する。
2.□ メッセージはすべてテキスト形式で読み取る(R) のチェックを外す。
3.送ったメールを受信してみる。

サンプルでは、テキスト形式が送信されてない為、
Outlook Express は、HTMLをデフォルトとして使用するのかもしれません。

Re: 返信@yu0627

by Abs » 2005年7月11日(月) 19:09

> TextEditorのプログラムを変えるとできるのでしょうか...。
文章形式を送信すれば、出来るかもしれません。

ページトップ