|
|
|
|
|
Dicas
|
|
Visual Basic (Internet)
|
|
|
Título da Dica: Enviar E-mail pelo OutLookExpress com Anexos via Código
|
|
|
|
Postada em 11/1/2004 por Araujolin
'Procedimento adaptado por Lindolfo de Araujo Filho 'Este procedimento usa a própria dll do OutlookExpress, 'por isso não precisa de componentes. 'Se o Outlook estiver selecionado a segurança como '"Avisar quando outro aplicativo tentar enviar email como se fosse eu" 'então aparecerá um alerta pedindo a permissão para enviar, 'o que nào causa problema algum. Em um Módulo ******************************************************************************************** Option Explicit
Type MAPIMessage Reserved As Long Subject As String NoteText As String MessageType As String DateReceived As String ConversationID As String Flags As Long RecipCount As Long FileCount As Long End Type Type MapiRecip Reserved As Long RecipClass As Long Name As String Address As String EIDSize As Long EntryID As String End Type Type MapiFile Reserved As Long Flags As Long Position As Long PathName As String FileName As String FileType As String End Type '********************************************************************************* 'Altere aqui o caminho da dll MSOE.DLL de acordo com o seu micro '********************************************************************************* Declare Function MAPISendMail Lib "C:\Arquivos de programas\Outlook Express\Msoe.dll" _ Alias "BMAPISendMail" _ (ByVal Session&, ByVal UIParam&, Message As MAPIMessage, _ Recipient() As MapiRecip, File() As MapiFile, ByVal Flags&, _ ByVal Reserved&) As Long
Global Const SUCCESS_SUCCESS = 0 Global Const MAPI_TO = 1 Global Const MAPI_CC = 2 Global Const MAPI_CCO = 3 Global Const MAPI_LOGON_UI = &H1
Function CountTokens(ByVal sSource As String, ByVal sDelim As String) Dim iDelimPos As Integer Dim iCount As Integer If sSource = "" Then CountTokens = 0 Else iDelimPos = InStr(1, sSource, sDelim) Do Until iDelimPos = 0 iCount = iCount + 1 iDelimPos = InStr(iDelimPos + 1, sSource, sDelim) Loop CountTokens = iCount + IIf(Right(sSource, 1) = sDelim, 0, 1) End If End Function
Function GetToken(sSource As String, ByVal sDelim As String) As String Dim iDelimPos As Integer ' Busca el primer delimitador iDelimPos = InStr(1, sSource, sDelim) If (iDelimPos = 0) Then GetToken = Trim$(sSource) sSource = "" Else GetToken = Trim$(Left$(sSource, iDelimPos - 1)) sSource = Mid$(sSource, iDelimPos + 1) End If
End Function
Sub ParseTokens(mArray() As String, ByVal sTokens As String, ByVal sDelim As String) Dim i As Integer For i = LBound(mArray) To UBound(mArray) mArray(i) = GetToken(sTokens, sDelim) Next End Sub
' PARAMETROS: ' sSubject: Es texto que aparecerá como Asunto del mensaje ' sTo: Lista delimitada por ";" com os destinatários da mensagem. ' sCC: Lista dos destinatários CC (Copia) ' sCCO: Lista dos destinatários CCO (Copia oculta) ' sAttach: Lista dos anexos a enviar
Function SendMail(sSubject As String, sTo As String, sCC As String, sCCO As String, _ sAttach As String, sMessage As String)
On Error GoTo Err_CapturarError
Dim i, cTo, cCC, cCCO, cAttach ' contadores de items Dim MAPI_Message As MAPIMessage ' Contar el número de items en cada lista cTo = CountTokens(sTo, ";") cCC = CountTokens(sCC, ";") cCCO = CountTokens(sCCO, ";") cAttach = CountTokens(sAttach, ";") ' Dimensionar las matrices para las listas ReDim rTo(0 To cTo) As String ReDim rCC(0 To cCC) As String ReDim rCCO(0 To cCCO) As String ReDim rAttach(0 To cAttach) As String ' Pasar el contenido de las listas a las matrices ParseTokens rTo(), sTo, ";" ParseTokens rCC(), sCC, ";" ParseTokens rCCO(), sCCO, ";" ParseTokens rAttach(), sAttach, ";" ' Crear la estructura MAPI Recip para almacenar todos los destinatarios ReDim MAPI_Recip(0 To cTo + cCC + cCCO - 1) As MapiRecip ' Cargar los "TO:" en la estructura For i = 0 To cTo - 1 MAPI_Recip(i).Name = rTo(i) MAPI_Recip(i).RecipClass = MAPI_TO Next i ' Cargar los "CC:" For i = 0 To cCC - 1 MAPI_Recip(cTo + i).Name = rCC(i) MAPI_Recip(cTo + i).RecipClass = MAPI_CC Next i ' Cargar los "CCO:" For i = 0 To cCCO - 1 MAPI_Recip(cTo + cCC + i).Name = rCCO(i) MAPI_Recip(cTo + cCC + i).RecipClass = MAPI_CCO Next i ' Crear la estructura MAPI_File para los adjuntos ReDim MAPI_File(0 To cAttach) As MapiFile ' Cargar los adjuntos en la estructura MAPI_Message.FileCount = cAttach For i = 0 To cAttach - 1 MAPI_File(i).Position = -1 MAPI_File(i).PathName = rAttach(i) Next i ' Llenar los campos del mensaje MAPI_Message.Subject = sSubject MAPI_Message.NoteText = sMessage MAPI_Message.RecipCount = cTo + cCC + cCCO ' Enviar el mensaje SendMail = MAPISendMail(0&, 0&, MAPI_Message, MAPI_Recip(), _ MAPI_File(), MAPI_LOGON_UI, 0&)
Salida: Exit Function
Err_CapturarError: Select Case Err.Number Case 48 'Error: No se encontró el archivo: C:\Archivos de programa\ _ Outlook Express\Msoe.dll SendMail = 48 Case 453 'Error: Imposible encontra el punto de entrada de DLL BMAPISendMail en _ MAPI32X.DLL 'Asignar el número de error. El filtro y el mensaje más adelante. SendMail = 453 Case Else 'Cazar todos aquellos errores inesperados. MsgBox Err.Number & " " & Err.Description End Select Resume Salida 'Salida a otro procedimiento.
End Function
No Controle Desejado ******************************************************************************************** Dim lngRet As Long 'Envia a mensagem lngRet = SendMail(("ASSUNTO"), ("destinatario@para"), ("destinatario@comcopia"), ("destinatario@comcopiaoculta"), ("C:\pasta\arquivo.txt"), ("TEXTO DA MENSAGEM"))
'Se ocorrer erro If lngRet <> SUCCESS_SUCCESS Then Select Case lngRet Case 2 MsgBox "Error nº.: " & lngRet & ", ao enviar email." & vbCr & vbCr _ & "Verifique a origem do arquivo anexado. ", vbCritical, "ERRO" Case 48 MsgBox "Error nº.: " & lngRet & ", ao enviar email." & vbCr & vbCr _ & "Não foi possível carregar MSOE.DLL", 16, "ERRO" Case 453 MsgBox "Error nº.: " & lngRet & " (de MSAccess), ao enviar email." _ & vbCr & vbCr _ & "MAPI32X.DLL, não é a versão correta.", vbCritical, "ERRO" Case -2147467259 MsgBox "Error nº.: " & lngRet & ", ao enviar email." & vbCr & vbCr _ & "MAPI32.DLL, não é a versão correta.", vbCritical, "ERRO" Case Else MsgBox "Erro ao enviar email: " & lngRet, vbCritical, "ERRO" End Select End If
|
|
|
|
|