Notifications
Clear all

Email com imagens no corpo - (level HARD!!)

7 Posts
2 Usuários
0 Reactions
7,852 Visualizações
(@lovera)
Posts: 90
Estimable Member
Topic starter
 

Ae galera. Essa duvida tá me matando. To empacado nisso desde a ultima quinta.

É o seguinte:
Mensalmente gero uma lista de aniversariantes do mês. Ele busca na minha base de dados os aniversariante do mês selecionado e joga eles na planilha chamada "Aniversarios". Essa planilha aniversario tem, alem da relação de nomes 2 imagens. Logo apos imprime e manda por e-mail via Outlook. Só que essa planilha vai no corpo do e-mail e não como um anexo.

O problema é que ele manda o e-mail sem as imagens.

O engraçado é que antes de anexar o corpo do e-mail via HTML.Body eu crio um arquivo temporário "C:Temp.htm" e se eu visualizo esse arquivo temporário pelo Internet Explorer eu consigo visualizar perfeitamente as imagens. Só que quando mando o e-mail não se vizualiza nada. Inclusive as imagens ficam com as bordas meio que duplicadas.

Informações:
No arquivo as referencias adicionadas são as seguintes:
-Microsoft Outlook 12.0 Object Library
-Microsoft Scripting Runtime

O codigo do e-mail está em um modulo de classe chamado cls_Email.
O codigo roda com o frm_Relatorios (coloquei comentarios em toda a programação q não tem envolvimento com o e-mail assim dá pra rodar numa boa).

Grato pela ajuda!!!!!!!!

 
Postado : 02/01/2013 2:16 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Eu não baixei seu anexo, mas tente adaptar o código abaixo.

Fonte::
http://www.vbaexpress.com/kb/getarticle.php?kb_id=326

Sub EmailComOutlook()
     
    Dim oApp As Object, _
    oMail As Object, _
    WB As Workbook, _
    FileName As String
     
     
    Application.ScreenUpdating = False
     
    ActiveSheet.Copy
    Set WB = ActiveWorkbook
    FileName = "Temp.xls"
    On Error Resume Next
    Kill "C:" & FileName
    On Error GoTo 0
    WB.SaveAs FileName:="C:" & FileName
     
     
    Set oApp = CreateObject("Outlook.Application")
    Set oMail = oApp.CreateItem(0)
    With oMail
         'Descomente a linha abaixo para usar um destinatário
          '. To = "alguém@dominio.com"
          'Descomente a linha abaixo para usar um assunto
          '. Assunto = "Olhe para o meu livro!"
        .Attachments.Add WB.FullName
        .Display
    End With
     
    WB.ChangeFileAccess Mode:=xlReadOnly
    Kill WB.FullName
    WB.Close SaveChanges:=False
     
    Application.ScreenUpdating = True
    Set oMail = Nothing
    Set oApp = Nothing
End Sub

 
Postado : 03/01/2013 7:00 am
(@lovera)
Posts: 90
Estimable Member
Topic starter
 

Mestre Alexandre, valeu a atenção. Mas não é isso. O código acima salva o arquivo com temporário do tipo somente leitura e envia ele como anexo na mensagem do e-mail.
Isso dai é suave pra mim.

A pegada que quero é mandar a planilha no corpo do e-mail.
Até já consegui transformando a planilha atual num arquivo temporário do tipo htm. O email sai bonitinho com as informações da planilha. Só que se a planilha tem imagem, no corpo do e-mail não aparece as imagens no outlook. O resto das informações aparecem todas numa boa.

Atende as minhas necessidades, mas não está perfeito e isso me mata!!!!!!!!

Ajudem ae!!!!

 
Postado : 03/01/2013 11:34 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Enquanto o pessoal não lhe mande uma resposta mais precisa, tente adaptar esse..
Fonte:
http://www.anshumusing.co.in/sending-em ... vba-macro/

Sub emailingProgram()
    Dim olapp As Outlook.Application
    Dim objmail As Outlook.mailitem
    Dim pos As Integer
    Set olapp = Outlook.Application
    For Each xcell In Sheets("Sheet1").Range(Range("tolist"), _
        Range("tolist").End(xlDown))
        msgText = Range("Msg")
        xcell.Activate
        ActiveCell.Offset(0, 1).Select
        'Se você acha que o ID de e-mail está no padrão nome.sobrenome @ mail.com uso deste bloco iF
         'O código vai para a outra declaração se o primeiro nome não é mencionado"
        If Selection.Value = "" Then
            pos = InStr(1, xcell.Value, ".")
            Fname = Mid$(xcell.Value, 1, InStr(1, xcell.Value, ".") - 1)
        Else
            'Se você mencionou os primeiros nomes na coluna Nome essa parte vai lê-lo diretamente
            Fname = Selection.Value
        End If
        'Para cada uma das células presentes na lista Para que criar um item de email e enviá-lo
        Set objmail = olapp.CreateItem(olMailItem)
        objmail.BodyFormat = olFormatRichText
        'Definir o assunto, tenho mantido um Feliz Aniversário, Mude como por seu desejo
        objmail.Subject = "Feliz Aniversário " + UCase(Mid$(Fname, 1, 1)) + Mid$(Fname, 2)
        
        'Descomente a seguinte linha de código, caso você quiser enviar uma mensagem simples
        'objmail.Body = "Hi " + UCase(Mid$(Fname, 1, 1)) + Mid$(Fname, 2) + "," + Chr(13) + Chr(10) + msgText
        
        '-->Para usar uma imagem em seu e-mail ou um corpo HTML
        objmail.HTMLBody = "<p><font size='6' face='arial' color='red'><i>Dear " & UCase(Mid$(Fname, 1, 1)) + Mid$(Fname, 2) & "<br></font></p><br><p align='CENTER'><font size='5' face='COMIC SANS' color='RED'>Wishing you a Wonderful Birthday</p><br><br></font><p align='CENTER'><a href='http://www.abrahamsarah.com'><img src='http://www.abrahamsarah.com/bilder/Happy-Birthday005.png' width=450 height=412 border=0></a></a><br><br><br><p align='left'>Thanks & Regards <br><br/> _<p><p align='left'><br>Anshuman Pandey<br>http://www.anshumusing.co.in/</p>"
        objmail.To = xcell.Value
        objmail.Send
        Set objmail = Nothing
        
    Next xcell
End Sub

Att

 
Postado : 03/01/2013 11:49 am
(@lovera)
Posts: 90
Estimable Member
Topic starter
 

Mestre Alexandre! Boa tarde. Só para dar um feedback.

Eu cansei de apanhar nesse assunto, e fui desenvolver uma outra necessidade. Agora que terminei me sinto com gás para ver se dessa vez consigo!
Vamos ver...

 
Postado : 17/01/2013 10:49 am
(@lovera)
Posts: 90
Estimable Member
Topic starter
 

Graças a sua dica consegui.

Tú é fera cara! Obrigado!

 
Postado : 17/01/2013 12:12 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Ola Senhores,

Acho que esse tópico é próximo do que preciso. Eu to criando uma rotina para enviar os dados da minha planilha para um compromisso no Outlook. Até ai, tudo ok, mas quero enviar no corpo do compromisso (email, como preferirem) eu quero que vá um intervalo de uma planilha, ou vários textbox. Inicialmente tentei colocar os dados de vários textboxes, mas estorou o limite de linhas. Dai eu pensei em enviar os dados para uma aba da planilha e depois pegar o intervalo da planilha e colocar no corpo do email, mas como fazer isso ? Pois simplesmente selecionar o intervalo não deu certo. Abaixo posto o código como ficou:

Sub Envia()

Dim objOutlook As Outlook.Application
Dim objAppt As Outlook.AppointmentItem
Dim objRecurPattern As Outlook.RecurrencePattern
Set objOutlook = CreateObject("Outlook.Application")
Set objAppt = objOutlook.CreateItem(olAppointmentItem)
With objAppt
.Start = UserForm2.TextBox37 & "  " & UserForm2.txtH1
.End = UserForm2.TextBox38 & "  " & UserForm2.txtH2


.Subject = UserForm2.txtassunto

.Location = UserForm2.txtEND


.Body = Sheets("Plan4").Range("B2:C56")



'Seta o comprimisso para ser lembrado
.ReminderMinutesBeforeStart = 15 'tempo em minutos
.ReminderSet = True
.MeetingStatus = olMeeting


.Recipients.Add UserForm2.TextBox36



Set objRecurPattern = .GetRecurrencePattern
'Seta a recorrência da tarefa

'.Save
.Send
.Close (olSave)
End With

End Sub
 
Postado : 06/05/2013 8:46 am