2011-09-17 9 views
-1

私は電子メールを転送するのに役立つ既存のOutlookのvbコードを持っていますが、添付ファイルと共に転送するのに役立ちます。どのようにこれらの添付ファイルを含めることができますか?Outlookの電子メールの添付ファイルを転送するための最良のVBメソッドは何ですか?

Private Const FORWARD_TO_EMAIL As String = "[email protected]_domain.com " 

    Private Const START_MESSAGE_HEADER As String = "--------StartMessageHeader--------" 
    Private Const END_MESSAGE_HEADER As String = "--------EndMessageHeader--------" 
    Private Const FROM_MESSAGE_HEADER As String = "From: " 

    Private Const DESKTOP_SWITCHDESKTOP As Long = &H100 
    Private Declare Sub LockWorkStation Lib "User32.dll"() 
    Private Declare Function SwitchDesktop Lib "user32" (ByVal hDesktop As Long) As Long 
    Private Declare Function OpenDesktop Lib "user32" Alias "OpenDesktopA" _ 
    (ByVal lpszDesktop As Any, _ 
    ByVal dwFlags As Long, _ 
    ByVal fInherit As Long, _ 
    ByVal dwDesiredAccess As Long) As Long 

    Sub ForwardEmail(MyMail As MailItem) 
    On Error Goto EndSub 

    Dim strBody As String 
    Dim objMail As Outlook.MailItem 
    Dim MailItem As Outlook.MailItem 

    Set objMail = Application.Session.GetItemFromID(MyMail.EntryID) 

    ' Initialize email to send 
    Set MailItem = Application.CreateItem(olMailItem) 
    MailItem.Subject = objMail.Subject 

    If (objMail.SenderEmailAddress <> FORWARD_TO_EMAIL) Then 
     ' Only forward emails when the workstation is locked 
     If (Not IsWorkstationLocked()) Then 
      Return 
     End If 

     ' Compose email and send it to your other email 
     strBody = START_MESSAGE_HEADER + Chr$(13) + _ 
     FROM_MESSAGE_HEADER + objMail.SenderEmailAddress + Chr$(13) + _ 
     "Name: " + objMail.SenderName + Chr$(13) + _ 
     "To: " + objMail.To + Chr$(13) + _ 
     "CC: " + objMail.CC + Chr$(13) + _ 
     END_MESSAGE_HEADER + Chr$(13) + Chr$(13) + _ 
     objMail.body 
     MailItem.Recipients.Add (FORWARD_TO_EMAIL) 

     ' Do not keep email sent to your mobile account 
     MailItem.DeleteAfterSubmit = True 
    Else 
     ' Parse the original mesage and reply to the sender 
     strBody = objMail.body 
     Dim posStartHeader As Integer 
     posStartHeader = InStr(strBody, START_MESSAGE_HEADER) 
     Dim posEndHeader As Integer 
     posEndHeader = InStr(strBody, END_MESSAGE_HEADER) 

     'Remove the message header from the body 
     strBody = Mid(strBody, 1, posStartHeader - 1) + _ 
     Mid(strBody, posEndHeader + Len(END_MESSAGE_HEADER) + 4) 

     Dim originalEmailFrom As String 
     originalEmailFrom = GetOriginalFromEmail(posStartHeader, _ 
     posEndHeader, objMail.body) 
     If (originalEmailFrom = "") Then 
      Return 
     End If 

     MailItem.Recipients.Add (originalEmailFrom) 

     ' Delete email received from your mobile account 
     objMail.Delete 
    End If 

    ' Send email 
    MailItem.body = strBody 
    MailItem.Send 


    ' Set variables to null to prevent memory leaks 
    Set MailItem = Nothing 
    Set Recipient = Nothing 
    Set objMail = Nothing 
    Exit Sub 

EndSub: 
End Sub 


Private Function GetOriginalFromEmail(posStartHeader As Integer, _ 
    posEndHeader As Integer, strBody As String) As String 
    GetOriginalFromEmail = "" 
    If (posStartHeader < posEndHeader And posStartHeader > 0) Then 
     posStartHeader = posStartHeader + Len(START_MESSAGE_HEADER) + 1 
     Dim posFrom As Integer 
     posFrom = InStr(posStartHeader, strBody, FROM_MESSAGE_HEADER) 
     If (posFrom < posStartHeader) Then 
      Return 
     End If 
     posFrom = posFrom + Len(FROM_MESSAGE_HEADER) 
     Dim posReturn As Integer 
     posReturn = InStr(posFrom, strBody, Chr$(13)) 
     If (posReturn > posFrom) Then 
      GetOriginalFromEmail = _ 
      Mid(strBody, posFrom, posReturn - posFrom) 
     End If 
    End If 
End Function 

Private Function IsWorkstationLocked() As Boolean 
    IsWorkstationLocked = False 
    On Error Goto EndFunction 

    Dim p_lngHwnd As Long 
    Dim p_lngRtn As Long 
    Dim p_lngErr As Long 

    p_lngHwnd = OpenDesktop(lpszDesktop:="Default", _ 
    dwFlags:=0, _ 
    fInherit:=False, _ 
    dwDesiredAccess:=DESKTOP_SWITCHDESKTOP) 

    If p_lngHwnd <> 0 Then 
     p_lngRtn = SwitchDesktop(hDesktop:=p_lngHwnd) 
     p_lngErr = Err.LastDllError 

     If p_lngRtn = 0 Then 
      If p_lngErr = 0 Then 
       IsWorkstationLocked = True 
      End If 
     End If 
    End If 
EndFunction: 
End Function 
+0

あなたのコードを含めてくださいので、私たちはそれをトラブルシューティングすることができます。 – JohnFx

+0

非常に長く、uがそれを求めて以来。ここはデュードです。デメリットで強調表示するためのTHX –

+0

ダウンボートは、その質問に答えるためのほとんど有益な情報を提供していないためです。コミュニティがあなたを助けてくれるようにしたいのであれば、少なくともあなたの質問を書く努力をしなければなりません。また、質問に直接関連するコードを投稿するだけで済みます。 – JohnFx

答えて

2

私はこれがあなたが探しているものだと思います。全く全体のメールオブジェクトを再構築する理由

Set MailItem.Attachments = objMail.Attachments 

いっそは、:

Set MailItem = objMail.Forward() 
MailItem.Recipients.Add(FORWARD_TO_EMAIL) 
MailItem.Send() 
+0

私は転送の添付ファイルを含めるためにこの行のコードだけが必要ですか?私は特に私が持っている特定の機能のために再構築する必要があります.... –

+0

それはあなたが何をしようとしているかによって異なります。あなたは非常に詳細に説明していないので、私はそれに答えることができません。 – JohnFx

+0

私は本質的に転送メッセージにファイルを添付するコード行を試しました。しかし、できません。上記の私のコードは、私のスクリプトで何をやっているのかを説明してくれました... –

関連する問題