個人事業主の方必見!確定申告のお悩み解決

ASPでBASP21を使用してメールを送信しようとしたのですが、SMTPサーバーが停止していたため処理結果が取得できませんでした。
このような場合、何か良い対策はありませんでしょうか。
ご教示の程よろしくお願いいたします。
以下にソースの概要を記載いたします。

Dim objBasp21
Dim strMailSendErr

Set objBasp21 = CreateObject("Basp21")

strMailSendErr = objBasp21.SendMail(パラメータ)
'↑↑↑ メールサーバが停止している場合ここで処理が止まってしまう?

If strMailSendErr <> "" Then
 'エラーの場合の処理
End If

このQ&Aに関連する最新のQ&A

A 回答 (1件)

メールサーバが止まっていてもエラーが返されるだけだと思いますけど・・・?


Time Out とか Not Connect とかが返ってきたように記憶しています。
既存のメーラで送っても同じようなエラーが返されますか?
失礼ながら『パラメータ』の所で何か問題発生かも。
『止まる』事は無かったように記憶しています。
『メールサーバが停止している』事は確認されましたか?
以下、BASP21のヘルプとほとんど一緒ですが (^^ゞ

Sub SendMailQ()
'http://www.hi-ho.ne.jp/babaq/
  Dim objBASP21   As Object   'BASP21
  Dim strMessage   As String   '実行メッセージ
  Dim strSvName   As String   'SMTPサーバ
  Dim strMailTo   As String   '宛先メールID
  Dim strMailFrom   As String   '送信元ユーザID
  Dim strSubj     As String   '表題
  Dim strBody     As String   '本文
  Dim strFiles    As String   '添付ファイル
  
  On Error GoTo AcErr
  '----( オブジェクト生成 )---------------------------------------
  Set objBASP21 = CreateObject("basp21")
  
  '----( パラメータ設定 )-----------------------------------------
  strSvName = "mail.goo.ne.jp"                'SMTPサーバ名
  strMailTo = "あんたへ<*********@mail.goo.ne.jp>"      '宛先メールID
  strMailFrom = "私" & "<*********@mail.goo.ne.jp>"      '送信元ユーザID
  strSubj = "テスト発信"                 '表題
  strBody = "送ってみました" & vbCrLf & "届いた"     '本文
  strFiles = "c:\windows\clock.avi" & vbTab & "c:\windows\winnt.bmp" '添付ファイル
    
    strMessage = objBASP21.SendMail _
        (strSvName, strMailTo, strMailFrom, strSubj, strBody, strFiles)
  
  '----( エラー判断 )-----------------------------------------------
  If strMessage <> "" Then
    MsgBox strMessage           'メッセージが表示される場合はエラー
  Else
    MsgBox "終了"
  End If
  
  Set objBASP21 = Nothing
Exit Sub

AcErr:
  Select Case err.Number
    Case Is = 429
      MsgBox "BASP21がインストールされてないかも"
    Case Else
      MsgBox "ErrorNo= " & err.Number _
        & vbCrLf & err.Description
  End Select
  Set objBASP21 = Nothing

End Sub

@酔なのでごめん・・・
WinXPpro or 2000 & Access2002 or 2000 と仮定しています。
    • good
    • 0
この回答へのお礼

返信が遅くなりまして申し訳ございません。

エラー判断のところで適切な処理ができていませんでした。
strMailSendErrにはエラー内容が返されていることを確認いたしました。
私の初歩的なミスです。
お手数をお掛けして申し訳ございません。
ご親切なご回答ありがとうございました。

お礼日時:2007/03/09 09:25

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QBASP21メール送信(SMTP-AUTH認証)ASP

ご存知の方、宜しくお願いします。

あるプロバイダのメールサーバへBASP21を使用してメールの送信を
行いたいのですが、以下のエラーMSGが表示されて
できません。
「エラー530 Sorry,Please use SMTP-AUTH instead」

outlook Expressだと問題なく送信できます。
outlook Expressの設定は
・送信メールサーバ
このサーバは認証が必要・・・にチェック
 受信メールサーバと同じ設定を使用する
SMTPポートは「587」

BASPでは、
MailServer="xxxx.co.jp:587
mailfrom="user1:pass1"
と設定しています。

詳しい方、宜しくお願いします。

Aベストアンサー

> 「エラー530 Sorry,Please use SMTP-AUTH instead」

 お使いのプロバイダではメールの送信に SMTP-AUTH (SMTP認証)が必要なようです。(OutlookExpressで「このサーバは認証が必要」にチェックが入っているのは、このSMTP認証を使うという意味です。)

 つまり、BASP21でメールを送信するときも、このSMTP認証を使うように指定してあげなければいけないのです。

下記参考URLのページに

> ●SMTP AUTH を使う 2000.07.20 New!

という項目がありますので、その辺を参考にしていろいろ実験してみてください。

参考URL:http://www.hi-ho.ne.jp/babaq/basp21.html

QBASP21のSendMailとSendMailExについて

お世話になります。
ASP(非.net)で、BASP21を利用してメール送信を行っております。

SendMailExでは普通に送信可能なのですが、まったく同じパラメタでSendMailを利用しようとすると、「HTTP/1.1 500 Internal Server Error」が発生してしまいます。

マニュアルを見る限りではSendMailとSendMailExのパラメタは同じと思われるのですが、実際は何か異なるのでしょうか。
それとも他に原因があるのでしょうか。
どなたか、ご存知の方いらっしゃいましたら、ぜひ教えていただけると助かります。

宜しくお願いします。

Aベストアンサー

http://www.hi-ho.ne.jp/babaq/basp21.html#0002

>>マニュアルを見る限りではSendMailとSendMailExのパラメタは同じと思われるのですが、実際は何か異なるのでしょうか。

マニュアルを見る限り、パラメータは違うと思うんだぁ。。。
ログファイルのあたりとか。。。ねぇ?

QDoEvents関数って何?

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そこで「EXCEL VBA パーフェクトマスター」という本を見たら

for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
DoEvents
next i
unload userform1
と入力すれば解決することがわかりました。

しかし「DoEvents」についてあまり詳しく書いていなかったのでDoEvents関数をヘルプで見ると、
「発生したイベントがオペレーティング システムによって処理されるように、プログラムで占有していた制御をオペレーティング システムに渡すフロー制御関数です。」

と書いてあるのですが正直、書いてあることがよくわかりません。

どなたかDoEvents関数について、
もう少しわかりやすく教えていただけませんか。
それから、最初に書いたコードで実行すると
ユーザーフォームの背景が真っ白になってしまう原因も
教えていただけませんか?

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

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そ...続きを読む

Aベストアンサー

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
    DoEvents
    Cells(i,1) = ""
  Next i
End Sub

Private Sub CommandButton2_Click()
  MsgBox "hoge"
End Sub

っていうフォームのコードがあった場合、
DoEvents を入れることによって、ループ中にユーザーがCommandButton2 を押すことによって CommandButton2 のクリック イベントも動いちゃいます。
CommandButton1 のクリック イベントではループの前に
CommandButton1.Enabled = False
CommandButton2.Enabled = False
を書いてフォーム上の CommandButton を無効にしておき、ループが終わったら
CommandButton1.Enabled = True
CommandButton2.Enabled = True
と書いて CommandButton を有効に戻してください。

これを工夫すれば、CommandButton2 で CommandButton1 のループを途中キャンセルする処理もすることができます。

Private Canceled As Boolean

Private Sub CommandButton1_Click()

  CommandButton2.Enabled = False

  Dim i As Long
  For i = 1 To 50000
    DoEvents

    If Canceled = True Then
      MsgBox "キャンセルしました"
      Exit Sub
    End If

    Cells(i, 1).Value = ""
  Next i
End Sub

Private CommandButton2_Click()
  Canceled = True
End Sub



コードの行頭にあるスペースは見易さのために全角スペースで作成していますので、これをこのままコピペするとエラーになるかもしれません。
コピペするなら行頭の全角スペースを半角スペースに直してください。

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
...続きを読む

Qbasp21をWindowsServer2008R2で利用するには。

basp21をWindowsServer2008R2で利用するには。

お世話になります。
32Bit WindowsServer2003環境で利用していたメール送信ンポーネントbasp21を64bit環境で利用できるか調査しています。
32bit環境で利用していたメール送信用のvbsファイルをなんとかそのまま使いたいです。

検索していたら、
64bit版のIIS7.0でBasp21を使う方法 を発見し試しましたが動作しません。
http://d.hatena.ne.jp/windowsserver/20080926/1222407780

行った操作は、以下の通りです。
・basp21を使いたいサイトに対応するアプリケーションプールの「詳細設定」を開きます
・「32ビットアプリケーションの有効化」を[True]にします。

次のアラートが表示されます。
エラー:ActiveXコンポーネントはオブジェクトを作成できません。'basp21'
コード:800A01AD
ソース:Microsoft VBScript 実行時エラー

basp21をWindowsServer2008R2で利用するためにどのような設定が足りないのでしょうか。
どなたかご教授いただけませんでしょうか。
何卒宜しくお願い致します。

basp21をWindowsServer2008R2で利用するには。

お世話になります。
32Bit WindowsServer2003環境で利用していたメール送信ンポーネントbasp21を64bit環境で利用できるか調査しています。
32bit環境で利用していたメール送信用のvbsファイルをなんとかそのまま使いたいです。

検索していたら、
64bit版のIIS7.0でBasp21を使う方法 を発見し試しましたが動作しません。
http://d.hatena.ne.jp/windowsserver/20080926/1222407780

行った操作は、以下の通りです。
・basp21を使いたいサイトに対応するアプリケー...続きを読む

Aベストアンサー

「32ビットアプリケーションの有効化」を[True]にします。

これはあくまで、ASPを利用していた際の設定方法になります。
VBスクリプトであれば、
c:\windows\SysWOW64\wscript.exe VBスクリプトファイル
(場合に応じてwscript.exe を cscript.exeに読み替えてください)

これでBASPを使ったVBスクリプトも動作するはずです。

Q[VBA]CDOメッセージ送信エラー

CDOメッセージオブジェクトを使用し、EXCEL2010 VBAよりメール送信を実現したいのですが..
下記コードの .Sendを実行後にエラーメッセージ「[6]オーバーフローしました」が表示されます。
試行錯誤しておりますが..自力では解決できないため、皆様よりご教授賜りたく何卒よろしくお願い
申し上げます。
---------------------------------------------------------------------------------------------------------
Public Sub SendMail()
Dim objCDOMsg As New CDO.Message '/* CDOメッセージオブジェクト */

'// Dim objCDOMsg As Object '/* CDOメッセージオブジェクト */
'// Set objCDOMsg = CreateObject("CDO.Message")

With objCDOMsg
' /* メールサーバ設定 */
With .Configuration.Fields
.Item(CdoConfiguration.cdoSendUsingMethod) = CdoSendUsing.cdoSendUsingPort '/* 外部SMTP指定 */
.Item(CdoConfiguration.cdoSMTPServer) = "111.222.333.44" '/* SMTPサーバ名 */
.Item(CdoConfiguration.cdoSMTPServerPort) = 25 '/* ポート№ */
.Item(CdoConfiguration.cdoSMTPConnectionTimeout) = 60 '/* タイムアウト */
.Item(cdoSMTPAuthenticate) = cdoAnonymous '/* SMTP認証なし */
.Item(CdoConfiguration.cdoLanguageCode) = CdoCharset.cdoShift_JIS '/* 文字セット */
.Update
End With

' /* メール編集 */
.To = "test@aaa-bbb.com" '/* 宛先 */
.CC = "test@aaa-bbb.com" '/* CC */
.From = "test@aaa-bbb.com" '/* 送信者 */
.Subject = "Test mail" '/* 件名 */
.TextBody = "メール本文" '/* メール本文 */
.AddAttachment "C:\Users\term\Desktop\TempFile.txt" '/* 添付ファイル */

' /* メール送信 */
.Send <------------------- このコードをステップ実行後にエラーメッセージ表示
End With

' /* オブジェクト変数解放 */
Set objCDOMsg = Nothing
End Sub
---------------------------------------------------------------------------------------------------------
[実行環境]
・Windows 7 Professional SP1
・EXCEL 2010 (Ver. 14.0.7165.5000)
・Outlook 2010(Ver. 14.0.7165.5000)

[補足]
・Outlook セキュリティセンターの設定
DEP有効、マクロ警告、プログラムアクセス警告
・Outlook アカウント種類
POP/SMTP

以上、宜しくお願いいたします。

CDOメッセージオブジェクトを使用し、EXCEL2010 VBAよりメール送信を実現したいのですが..
下記コードの .Sendを実行後にエラーメッセージ「[6]オーバーフローしました」が表示されます。
試行錯誤しておりますが..自力では解決できないため、皆様よりご教授賜りたく何卒よろしくお願い
申し上げます。
---------------------------------------------------------------------------------------------------------
Public Sub SendMail()
Dim objCDOMsg As New CDO.Message '/* CD...続きを読む

Aベストアンサー

こんにちは。

正直な話、もうCDOを使ったのは古い昔の話なので、このエラーの要因というのは、コードそのものよりも、固有の設定に問題があるように思います。

自分で作ってみました。
ご質問のコードを元に、googleを使って自分自身用に作ってみました。
以下のコードで送られることは確認しましたが、ここ最近、Google は、メールの設定が異様に厳しくなりましたので、Google自体のメール・セキュリテイの設定を下げないとGoogleからは送信されませんが、コード自体は問題なさそうです。

>「転送においてサーバーに接続できませんでした」
このエラーメッセージは、Configuration のミスで発生しました。正しく直したら、通りました。

細かい問題は、相手のメールサーバーとの関係ですから、設定を細かく見ていくしかないと思います。

'//
Const myAddress As String ="********"
Const myPSW As String = "********"

Public Sub SendMail2()
Dim objCDOMsg As CDO.Message ' New CDO.Message '/* CDOメッセージオブジェクト */do.
Set objCDOMsg = New CDO.Message
'// Dim objCDOMsg As Object '/* CDOメッセージオブジェクト */
'// Set objCDOMsg = CreateObject("CDO.Message")
On Error GoTo ErrHandler
With objCDOMsg
  ' /* メールサーバ設定 */
  With .Configuration.Fields
    .Item(CdoConfiguration.cdoSendUserName) = myAddress '/*ユーザー名*/
    .Item(CdoConfiguration.cdoSendPassword) = myPSW  '/*パスワード*/
    .Item(CdoConfiguration.cdoSendUsingMethod) = CdoSendUsing.cdoSendUsingPort '/* 外部SMTP指定 */
    .Item(CdoConfiguration.cdoSMTPConnectionTimeout) = 100 '/* タイムアウト */
    .Item(CdoConfiguration.cdoSMTPServer) = "smtp.gmail.com" ' /* SMTPサーバ名 */
    .Item(CdoConfiguration.cdoSMTPServerPort) = 465 '/* ポート№ */
    .Item(CdoConfiguration.cdoSMTPAuthenticate) = cdoBasic
    .Item(CdoConfiguration.cdoSMTPUseSSL) = True
    .Item(CdoConfiguration.cdoLanguageCode) = CdoCharset.cdoShift_JIS '/* 文字セット */
    .Update
  End With
  
  ' /* メール編集 */
  .To = "xxxxxx@yyyyy.co.jp" '/* 宛先 */
  .From = "******@gmail.com" '/* 送信者 */
  .Subject = "Test mail" '/* 件名 */
  .TextBody = "MainMessage" & vbNewLine & Date & " " & Time & vbNewLine & _
   "This is TesMail" '/* メール本文 */
  '.AddAttachment ThisWorkbook.Path & "\myTest.Txt" ' "C:\Users\term\Desktop\TempFile.txt" '/* 添付ファイル */

  ' /* メール送信 */
  .Send '<------------------- このコードをステップ実行後にエラーメッセージ表示
End With
ErrHandler:
If Err.Number <> 0 Then
   MsgBox Err.Number & " :" & Err.Description
   'Debug.Print Err.Number & " :" & Err.Description
End If
' /* オブジェクト変数解放 */
Set objCDOMsg = Nothing
End Sub

こんにちは。

正直な話、もうCDOを使ったのは古い昔の話なので、このエラーの要因というのは、コードそのものよりも、固有の設定に問題があるように思います。

自分で作ってみました。
ご質問のコードを元に、googleを使って自分自身用に作ってみました。
以下のコードで送られることは確認しましたが、ここ最近、Google は、メールの設定が異様に厳しくなりましたので、Google自体のメール・セキュリテイの設定を下げないとGoogleからは送信されませんが、コード自体は問題なさそうです。

>「転送においてサー...続きを読む

QEXCEL VBAでメール添付して送信

こんにちは。
EXCEL VBAで
自分のファイルをある宛先にメールで送信したい場合は、
どのようにしたらできますか?
どなたか、わかる方・・・教えてください。
よろしくお願いします。

Aベストアンサー

参考のスレのVBAを必要な部分だけにすると以下になります。
準備
VBエディターのツール 参照設定で
Microsoft Outlook 10.0 Object Library にチェックをいれます。
B3セルに 宛先 メールアドレス
F3セルに CC メールアドレス
C3セルに 件名
D3セルに 本文
G3セルに 添付ファイルのパスとファイル名
入れておいた場合です。

Sub ボタン1_Click()
Dim myOLApp As Object
Dim myDATA As MailItem
Set myOLApp = CreateObject("Outlook.Application")
Set myDATA = myOLApp.CreateItem(olMailItem)
myDATA.To = Range("B3").Value
myDATA.CC = Range("F3").Value
myDATA.Subject = Range("C3").Value
myDATA.Body = Range("D3").Value
myDATA.Attachments.Add Range("G3").Value
myDATA.Send
Set myDATA = Nothing
Set myOLApp = Nothing
End Sub

コピペして使ってみてください。コマンドの意味は先紹介のスレに
説明して有ります。

参考のスレのVBAを必要な部分だけにすると以下になります。
準備
VBエディターのツール 参照設定で
Microsoft Outlook 10.0 Object Library にチェックをいれます。
B3セルに 宛先 メールアドレス
F3セルに CC メールアドレス
C3セルに 件名
D3セルに 本文
G3セルに 添付ファイルのパスとファイル名
入れておいた場合です。

Sub ボタン1_Click()
Dim myOLApp As Object
Dim myDATA As MailItem
Set myOLApp = CreateObject("Outlook.Application")
Set myDATA = myOLApp.CreateItem(olM...続きを読む

QアクセスVBAでメールを送信(複数宛先・添付)

vbaを使用しメールを送信しようとしております。
以下に記載のように設定をしておりますが、2点設定の方法がわかりかねております。
大変お手数ですが、ご教示いただければ幸いです。

(1)宛先を複数設定したい場合はどのように設定すればよろしいでしょうか。
別々に送るのではなく、宛先にアドレス1、アドレス2を設定し1通のメールで送信をしたいです。

(2)添付ファイルを複数添付したいのですが、宛先によって添付ファイルの数が異なります。
たとえば、宛先Aには添付ファイルが1,2があるが、Bには添付ファイル1のみであり添付ファイル2フィール付度はNULLです。
この場合、エラーになってしまうのですが、"添付ファイルフィールドがnullでも無視してそのまま送信する"と設定はできるのでしょうか。

---------------------------------------
テーブル名:テーブル1
フィールド:アドレス1、アドレス2、件名、本文、添付ファイル1、添付ファイル2
---------------------------------------
Sub SAMPLE_0216()
Dim db As DAO.Database
Dim R1 As Recordset
Dim AP As Object
Dim ML As Object
Dim L1 As String

Set db = CurrentDb
Set R1 = db.OpenRecordset("テーブル1")
Set AP = CreateObject("Outlook.Application")

R1.MoveFirst

Do Until R1.EOF
'メールを作成
Set ML = AP.createitem(0)
'アドレスをセット
ML.To = R1!アドレス1
'件名をセット
ML.Subject = R1!件名
'本文をセット
ML.Body = R1!本文
'ファイルを添付1
L1 = R1!添付ファイル1
ML.Attachments.Add L1
'ファイルを添付2
L1 = R1!添付ファイル2
ML.Attachments.Add L1

'メールを送信
ML.Send

R1.MoveNext
Loop

End Sub
-----------------------------------------


どうぞよろしくお願いいたします。

vbaを使用しメールを送信しようとしております。
以下に記載のように設定をしておりますが、2点設定の方法がわかりかねております。
大変お手数ですが、ご教示いただければ幸いです。

(1)宛先を複数設定したい場合はどのように設定すればよろしいでしょうか。
別々に送るのではなく、宛先にアドレス1、アドレス2を設定し1通のメールで送信をしたいです。

(2)添付ファイルを複数添付したいのですが、宛先によって添付ファイルの数が異なります。
たとえば、宛先Aには添付ファイルが1,2があるが、Bには添付フ...続きを読む

Aベストアンサー

Accessはわからないのですが、ExcelからのOutlookの操作と基本は同じはずなので一部推定を交えて答えさせていただきます。

まず宛先ですが、";"(セミコロン)で区切れば複数設定できます。
Access VBA の書き方ですが、
ML.To = R1!アドレス1 & ";" & R1!アドレス2
でよさそうに思えるのですがいかがでしょうか。
宛先が1つの場合でも、アドレス1かアドレス2のうち宛先の入っていない方が空文字列(長さ0の文字列)であればこのままで大丈夫なはずです。

次に添付ファイルですが、Nullを無視してそのまま送信可能かどうかはわからないのですが、Nullなら添付しないようにすれば話は簡単だと思います。
Access VBA の書き方ですが、たぶん以下のようなものでいいと思います。
'ファイルを添付1
IF IsNull(R1!添付ファイル1) = False Then
L1 = R1!添付ファイル1
ML.Attachments.Add L1
End If
'ファイルを添付2
IF IsNull(R1!添付ファイル2) = False Then
L1 = R1!添付ファイル2
ML.Attachments.Add L1
End If
(フィールドがNullかどうかの判定は参考URLのページをまねてみたのですがこれでいいでしょうか?)
http://oshiete.goo.ne.jp/qa/1223220.html

参考URL:http://oshiete.goo.ne.jp/qa/1223220.html

Accessはわからないのですが、ExcelからのOutlookの操作と基本は同じはずなので一部推定を交えて答えさせていただきます。

まず宛先ですが、";"(セミコロン)で区切れば複数設定できます。
Access VBA の書き方ですが、
ML.To = R1!アドレス1 & ";" & R1!アドレス2
でよさそうに思えるのですがいかがでしょうか。
宛先が1つの場合でも、アドレス1かアドレス2のうち宛先の入っていない方が空文字列(長さ0の文字列)であればこのままで大丈夫なはずです。

次に添付ファイルですが、Nullを無視してそのまま送信...続きを読む

QVBSでメール送信

VBS初心者です。
以下のサイトを参考に,特定のフォルダにファイルが追加されたら,
指定のメールアドレスに添付して送信するVBSを作成してみました。

http://plaza.rakuten.co.jp/mscrtf/diary/201206260000/

ちなみに記述を少しだけ変えて,
送信したファイルを削除しないようにしています。
しかしこうしてしまうと,「送信フォルダ」にファイルが追加されると,
その新しく追加されたファイルではなく,
前から置いてある別のファイルが送信されてしまいます。
「最新のファイルを添付して送信」することはできないでしょうか?

またファイルを添付してメールを送信することはできるのですが,
なぜか送信受信ともに,まったくおなじメールが2通作成されてしまいます。
(2通同時ではなく1通目が届いて30秒後くらいにもう1通届きます)。

あと,受信側メールアドレスをbbb@hotmail.co.jpにし,
smtpserver:smtp.live.com
smtpserverport:587
とすると
「転送においてサーバーに接続できませんでした」と出てしまいます。
ポート番号を,465や25にしてみましたがだめでした。
どこを直せばいいでしょうか?

以上の解決策をご教授ください!

コードは以下です。

Dim Fs, strPath, Fl, F, NewFile, NewFileFP, OutF
Set Fs = CreateObject("Scripting.FileSystemObject")
strPath = "C:\FileSend\送信フォルダ\"
NewFile = ""
Set Fl = Fs.GetFolder(strPath)
For Each F In Fl.Files
If F.Name > NewFile Then
NewFile = F.Name
End If
Next
NewFileFP = Fl & "\" & NewFile
Dim WshShell, BtnCode
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objShell = CreateObject("Wscript.Shell")
Set oMsg = CreateObject("CDO.Message")
oMsg.From = "ファイル送信元 <aaa@gmail.com>" '送信元
oMsg.To = "bbb@hotmail.co.jp" '送信先

oMsg.Subject = "ファイルの送信test3" '件名
oMsg.TextBody = "ファイルをお送りします。" 'メール本文
oMsg.AddAttachment NewFileFP '添付
oMsg.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
oMsg.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.googlemail.com"
oMsg.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
oMsg.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
oMsg.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
oMsg.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusername") = "aaa@gmail.com"
oMsg.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "******"
oMsg.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
oMsg.Configuration.Fields.Update
oMsg.Send

oMsg.Configuration.Fields.Update
oMsg.Send
Set OutF = Fs.OpenTextFile("C:\FileSend\test.txt",8)
OutF.WriteLine "Date[" & date & "] Time[" & time & "] File[" & NewFile & "]"
OutF.Close

objShell.Popup "メール送信しました。", 0, "送信完了", 0
Set Fs = Nothing
Set Fl = Nothing
Set OutF = Nothing

使用しているパソコンは
Win7Professional 32bit
です。

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

VBS初心者です。
以下のサイトを参考に,特定のフォルダにファイルが追加されたら,
指定のメールアドレスに添付して送信するVBSを作成してみました。

http://plaza.rakuten.co.jp/mscrtf/diary/201206260000/

ちなみに記述を少しだけ変えて,
送信したファイルを削除しないようにしています。
しかしこうしてしまうと,「送信フォルダ」にファイルが追加されると,
その新しく追加されたファイルではなく,
前から置いてある別のファイルが送信されてしまいます。
「最新のファイルを添付して送信」することは...続きを読む

Aベストアンサー

 簡単なところから回答いたします。

> なぜか送信受信ともに,まったくおなじメールが2通作成されてしまいます。
 これは、
oMsg.Configuration.Fields.Update
oMsg.Send
がダブっているからです。

 参考にされた サイト にも2回は書いてありません。

 コーディング をされる際に、誤ってコピペでもされたのでしょうが、メール送信スクリプト などを書かれるときには、細心の注意が必要です。

●CDO.Messageによるメール送信
http://serialty.blog117.fc2.com/blog-entry-10.html
のように、[With ステートメント] を使ったり、長い文字列を
strConfigurationField ="http://schemas.microsoft.com/cdo/configuration/"
というように、定数に代入したりして、コード の可読性を高める工夫をされることをお薦めします。

--------------------------------------------------

>「最新のファイルを添付して送信」することはできないでしょうか?
 お示しの コード で添付ファイルを決定しているのは、
  For Each F In Fl.Files
    If F.Name > NewFile Then
      NewFile = F.Name
    End If
  Next
の部分ですが、これは、strPath フォルダ 内の ファイルを、名前順に巡回(For ~ Next ループ)して、最後の ファイル を NewFile に代入しています。
 従いまして、NewFile に代入されるのは、「前から置いてある別のファイル」ではなくて、名前の昇順に並べた場合の最後の ファイル ということになります。


 「最新のファイル」を特定するためには、strPath フォルダ 内の ファイル の更新日時や作成日時を検証して、最も新しいものを NewFile に代入するということになりますが、手っ取り早いのは、
oMsg.Send
した後で、添付ファイル を別の フォルダ(例えば「送信フォルダ」の下に「送信済み」フォルダ でも作っておいて、そこ)に移動するのが良いかと存じます。

--------------------------------------------------

> どこを直せばいいでしょうか?
 私は hotmail 環境がありませんので、試しようがありませんが、WEB でいろいろと検索してみますと、
・CreateObject("CDO.Message") は万能ではない。
・スパム防止策で Microsoft ができないようにしている。
というような意見が見受けられます。

 一方、
●[Template] Send SMTP email with Visual Basic Script (vbs) from Command Prompt using CDO([テンプレート] CDOを使用して、コマンドプロンプトからVisual Basicスクリプト(VBS)でSMTP電子メールを送信)
http://www.unix.com/windows-dos-issues-discussions/194939-template-send-smtp-email-visual-basic-script-vbs-command-prompt-using-cdo.html
には、live.com からでも メール が送れる スクリプト というような感じで書かれていますので、こちらをご参考になさってみてください。


 ただし、ウィキペディア(http://ja.wikipedia.org/wiki/Hotmail)には、
> Hotmail(ホットメール)は、MSNが提供していた(過去形)Webメールサービスである。
と書かれており、Microsoft としても仕様の変更を頻繁に行なっているようですので、何とも申せませんねぇ。。。

 簡単なところから回答いたします。

> なぜか送信受信ともに,まったくおなじメールが2通作成されてしまいます。
 これは、
oMsg.Configuration.Fields.Update
oMsg.Send
がダブっているからです。

 参考にされた サイト にも2回は書いてありません。

 コーディング をされる際に、誤ってコピペでもされたのでしょうが、メール送信スクリプト などを書かれるときには、細心の注意が必要です。

●CDO.Messageによるメール送信
http://serialty.blog117.fc2.com/blog-entry-10.html
のように、[With ステー...続きを読む

QVBでメール送信ソフトを作成

こんにちわ。
タイトルの通りなんですが、VBで簡易的なメール送信
ソフトを作ろうと考えています。
(テキストボックスに入力された文字を送信)
VBでメールの送信(受信)を行うには、Winsockを使用
すればいいというのは分かりましたが、具体的な使用
方法がわかりません。
まだ入門書片手にVBの勉強をしている者なので、細か
く解説してくれる方、また詳細な説明のあるサイト
を知っている方がいらっしゃいましたらご回答ください。
よろしくお願いします。

Aベストアンサー

ここを参考にどうぞ。
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_t08.htm

ここの内容が分からなければ、まずあなたの場合、プログラミングに慣れることが先決です。

簡単なのは、BASP21などのDLLを使うことです。
http://www.hi-ho.ne.jp/babaq/bsmtp.html
VBなどの簡単な言語は、既存の部品を組み合わせれば作れます。

参考URL:http://www.hi-ho.ne.jp/babaq/bsmtp.html

Qフォルダ内の、最新のタイムスタンプのファイルを1つだけ取り出す(VBscript)

フォルダ内に複数のファイルが存在しており、その中でタイムスタンプが一番最新のファイルをコピーしたいと考えているのですが、ファイル同士のタイムスタンプを比較する方法が見つけられませんでした。どなたかご存知の方がいらっしゃいましたら、教えて頂けませんか?

Aベストアンサー

私が書いたスクリプトの後ろにkhaii21さんが書き足されたんですよね?

不思議ですねぇ。本当に書かれたものそのままなら、
>strNewFileName2 = objFile.Name

この行通るはず無いんですけど。
strNewFileName2、空のままのはずです。

通らない理由は、
>If dtmMostNewTimeStamp < objFile.DateLastModified Then

です。dtmMostNewTimeStampより新しいファイル、strNewFileName以外であるわけ無いですよね。


と、khaii21さんが書かれたスクリプトについて解説してみましたが、2番目に新しいファイルを見つけるのに列挙しなおす必要なんて無いですよ(^^;;;


私が書いたスクリプト、ちょっと直すだけで1番目と2番目両方取れます。

Dim strNewFileName
Dim dtmMostNewTimeStamp

Dim strNewFileName2
Dim dtmMostNewTimeStamp2

'ファイルを列挙
For Each objFile In objFolder.Files

If dtmMostNewTimeStamp < objFile.DateLastModified Then

dtmMostNewTimeStamp2 = dtmMostNewTimeStamp
strNewFileName2 = strNewFileName

dtmMostNewTimeStamp = objFile.DateLastModified
strNewFileName = objFile.Name

ElseIf dtmMostNewTimeStamp2 < objFile.DateLastModified Then

dtmMostNewTimeStamp2 = objFile.DateLastModified
strNewFileName2 = objFile.Name

End If

Next

考え方は、列挙したファイルが今までで一番新しかったら
・前の1番目→2番目
・列挙されたファイル→1番目
に、

1番目より古いけど、それまでの2番目よりは新しければ、

・前の1番目→そのまま1番目
・列挙されたファイル→2番目

になりますよね。

私が書いたスクリプトの後ろにkhaii21さんが書き足されたんですよね?

不思議ですねぇ。本当に書かれたものそのままなら、
>strNewFileName2 = objFile.Name

この行通るはず無いんですけど。
strNewFileName2、空のままのはずです。

通らない理由は、
>If dtmMostNewTimeStamp < objFile.DateLastModified Then

です。dtmMostNewTimeStampより新しいファイル、strNewFileName以外であるわけ無いですよね。


と、khaii21さんが書かれたスクリプトについて解説してみましたが、2番目に新しいファ...続きを読む


人気Q&Aランキング