× Linguagem de Programação ADVPL

Perguntas Envio de vários arquivos por email com a classe TMailManager

Mais
11 anos 8 meses atrás #13067 por RonaldoLopes
Boa noite alguém já conseguiu enviar multiplos arquivos por email?

Utilizei a classe TMailManager para tal, adicionei em um array os arquivos e mesmo assim não envia.
Faz tudo certo, conecta, ao servidor mas na hora de enviar..
Acredito que está errado a forma que envia o array.
Fiz dessa forma:

//adiciona os arquivos a um array
Local aFiles := Directory(cPathLocal + Alltrim("*.*"))
//para fazer o envio
nRet := oMail:SendMail(cEmailFrom,;
cEmailTo ,;
cAssunto,;
cCorpoM,;
"",;
"",;
aFiles,;//<- passa o array com itens
0)

Documentação
tdn.totvs.com/display/tec/TMailManager

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 8 meses atrás #13069 por lalberto
Cara realmente está certo, vc só precisa ver quantos arquivos estão entrando neste vetor, e o tamanho dos mesmos, pois vi que vc colocou *.* ou seja, todos os arquivos do diretório.

Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 8 meses atrás #13074 por jrBrittes
Entao eu zipei os arquivos antes de enviar.

E depois eu copio a pasta Zip.

/*
Função : fMail
Tipo : Função de usuário
Descrição : Envio de arquivo por e-mail
Parâmetros :
Retorno :
Atualizações:
- 20/10/2012 - Brittes - Construção Inicial
*/
Static Function fEnvMail(sGDe,sGPara,sGAss,cAnexo,cMMsg)

local oServer := Nil
local oMessage := Nil
local nErr := 0
Local cFrom := sGDe
Local cTo := sGPara
Local cCC := ""
Local cSubject := sGAss
local cPopAddr := ""
local cSMTPAddr := GetNewPar("MV_YSMTP" ,"smtp.gmail.com")
local cPOPPort := GetNewPar("MV_YPORTPOP" ,"995")
local cSMTPPort := GetNewPar("MV_YPORTSMT" ,"465")
local cUser := GetNewPar("MV_YUSER" ,"Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo." )
local cPass := //retirado do fonte para segurança
local nSMTPTime := 60 // Timeout SMTP

// Instancia um novo TMailManager
oServer := tMailManager():New()

// Usa SSL na conexao
oServer:setUseSSL(.T.)

// Inicializa
oServer:init("",alltrim(cSMTPAddr), alltrim(cUser), Alltrim(cPass),cPOPPort,cSMTPPort)

// Define o Timeout SMTP
If oServer:SetSMTPTimeout(nSMTPTime) != 0
Alert("[ERROR]Falha ao definir timeout")
return .F.
endif

// Conecta ao servidor
nErr := oServer:smtpConnect()
if nErr <> 0
Alert("[ERROR]Falha ao conectar: " + oServer:getErrorString(nErr))
oServer:smtpDisconnect()
return .F.
endif

// Realiza autenticacao no servidor
nErr := oServer:smtpAuth(cUser, cPass)
If nErr <> 0
Alert("[ERROR]Falha ao autenticar: " + oServer:getErrorString(nErr))
oServer:smtpDisconnect()
return .F.
Endif

// Cria uma nova mensagem (TMailMessage)
oMessage := tMailMessage():new()
oMessage:clear()
oMessage:cFrom := cFrom
oMessage:cTo := cTo
oMessage:cSubject := cSubject
oMessage:cBody := ""

//Copia arquivos do remote local para o servidor, compactando antes de transmitir
CpyT2S( cAnexo, "\Certificados")

//Adiciona um attach anexa arquivo ele pega o anexo dentro da pasta certificados na raiz do servidor //GetSrvProfString("RootPath","")
nErr := oMessage:AttachFile("\Certificados\certificados.rar" )
If nErr < 0
Alert("[ERROR]Falha ao Anexar: " + oServer:getErrorString(nErr))
Return .F.
Endif

// Envia a mensagem
nErr := oMessage:send(oServer)
if nErr <> 0
Alert("[ERROR]Falha ao enviar: " + oServer:getErrorString(nErr))
oServer:smtpDisconnect()
return .F.
Endif

// Disconecta do Servidor
oServer:smtpDisconnect()

return .T.

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 8 meses atrás #13086 por RonaldoLopes
Cara, o usuário não vai ter interação com os arquivos, eles precisam ser enviados logo após gerado.
Uma solução seria compactar, mas como faço isso?
Vlw

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 7 meses atrás #13159 por lalberto
Cara mas qual o tamanho deste anexo estamos falando ? que eu saiba não tem limite, mas precisa ver realmente o tamanho do arquivo, acho que deve ser esse seu problema.

Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 7 meses atrás - 11 anos 7 meses atrás #13167 por RonaldoLopes
Resolvi, ao invés de enviar o array com os dados, passo para o atach da seguinte forma:
For nCount := 1 To Len(aFiles)

CpyT2S (cPath+aFiles[nCount,1], GetSrvProfString('StartPath','') + 'certificados\', .F. )
oMessage:AttachFile(GetSrvProfString('StartPath','') +'certificados\'+aFiles[nCount,1])
oMessage:AddAttHTag( 'Content-ID: <ID_conf_'+aFiles[nCount,1]+'>' )

Next nCount
Onde aFiles está carregado com meus arquivos.
Ultima edição: 11 anos 7 meses atrás por lalberto.

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.145 segundos
Joomla templates by a4joomla