Correo electrónico a través de navegador desde access 2007

una vez más. Repito la pregunta que hice en agosto por si no hubiese realizado bien los pasos a seguir para preguntar:

Estoy realizando una aplicación para mi trabajo en access 2007 (llevo ya dos años...) y me encuentro con un problema:

Debo poder enviar un correo electrónico desde un formulario de access (los datos de la cuenta, el asunto y el correo en sí mismo los tomaremos de ese formulario) simplemente pulsando un botón de comando "cmdenviar"

Gracias a la generosidad de neckkito, pude hacerlo sin problemas usando un correo de gmail.

El problema es que, en mi trabajo, se utiliza un correo electrónico a través de navegador. El programa sería de IBM Lotus iNotes y el navegador es Internet Explorer.

Lo he intentado con el metodo que explicó neckkito "CDO", pero siempre me da el mismo mensaje de error "El componente activeX no puede crear el objeto" y me señala la línea que aparece en negrita:

Dim Maildb As Object
Dim MailDoc As Object
Dim Body As Object
Dim Session As Object
Set Session = CreateObject("notes.NotesSession") 

'aquí he probado con Lotus. NotesSession y con iNotes. NotesSession con el mismo 'resultado.
Call Session.Initialize("contraseña")
Set Maildb = Session.GETDATABASE("", "c:\notes\data\mail\[email protected]")
If Not Maildb.IsOpen = True Then
Call Maildb.Open
End If
Set MailDoc = Maildb.CREATEDOCUMENT
Call MailDoc.ReplaceItemValue("Form", "Memo")
Call MailDoc.ReplaceItemValue("SendTo", correoe.Value)
Call MailDoc.ReplaceItemValue("Subject", "Prueba")
Set Body = MailDoc.CREATERICHTEXTITEM(paraemail.Value)
Call Body.APPENDTEXT("Body text here")

MailDoc.DeliveryReport = "B"

Call MailDoc.ReplaceItemValue("PostedDate", Now())
Call MailDoc.SEND(False)
Set Maildb = Nothing
Set MailDoc = Nothing
Set Body = Nothing
Set Session = Nothing

Tampoco sé muy bien qué es lo que tengo que sustituir ni por qué expresiones debo sustituirlo, pero como no consigo pasar de esa primera línea, no puedo hacerme una idea...

¿Puede deberse a que se trata de un correo electrónico por navegador? Y, si es así, ¿Podría conseguir enviar el mensaje desde Access mediante Vb o no?

Por favor, os agradecería una respuesta o una orientación. Sé que hay muchas entradas para este tema, pero, debido a mi falta de conocimientos, no sé si alguna puede servirme y tampoco sé muy bien cómo aplicar los códigos.

Lo peor es que mis jefes están abroncándome constantemente por el retraso que llevo (la verdad es que dos años son demasiado) pero yo no tengo ni idea de Access (bastante estoy haciendo teniendo en cuenta que ni me lo han pagado ni me lo van a pagar :P) pero teniendo en cuenta cómo está lo del trabajo...

2 Respuestas

Respuesta
1

Primeramente decirte que no conozco Lotus iNotes, y por tanto desconozco su funcionamiento, pero hace una par de años respondí una pregunta pregunta a una usuaria que usaba ese sistema y le funcionó con este código:

Private Sub Form_Load()
On Error GoTo sol_err
Dim Mail As Variant
Dim Mensaje As Variant
Dim Asunto As String
Dim db As Object
Dim doc As Object
Dim OutApp As Object
Dim rst As Recordset
'Comprobamos el día de la semana. Si no es lunes (valor 1) salimos
If DatePart("w", Date, vbMonday) <> 1 Then Exit Sub
'Si es lunes:
'Creamos el RecordSet
Set rst = CurrentDb.OpenRecordset("incidencias por semana")
'Nos movemos al primer registro
rst.MoveFirst
'Iniciamos el recorrido de registros
Do Until rst.EOF
'Cogemos el valor del destinatario
Mail = rst.Fields("Mail").Value
'Si no existiera el mail pasamos al siguiente registro
If IsNull(vMail) Then GoTo Siguiente
'Creamos el mail
Set OutApp = CreateObject("Notes.NotesSession")
Set db = OutApp.GETDATABASE("", "names.nsf")
Set doc = db.CREATEDOCUMENT()
Asunto = "Incidencias pendientes " & Format(Date, "dd/mm/yy")
Mensaje = rst.Fields("Nombre").Value & " La Tienda " & rst.Fields("Tienda").Value & " con fecha " & rst.Fields("Fecha Compra").Value
Mensaje = Mensaje & " cuya causa es " & rst.Fields("Causa").Value & " del albarán " & rst.Fields("Albarán").Value
Mensaje = Mensaje & " del transportista " & rst.Fields("Transportista").Value & " sigue pendiente." & " Observaciones: "
Mensaje = Mensaje & rst.Fields("Observaciones").Value
With doc
.To = Mail
.Subject = Asunto
.body = Mensaje
.Display
.Send
.SaveMessageOnSend = True  '->Esta linea creo que le fallaba, pero sin ella iba bien
End With
'Lanzamos el mail
Call doc.Send(False, Mail)
Siguiente:
'nos movemos al registro siguiente
rst.MoveNext
Loop
Salida:
'Cerramos conexiones y liberamos memoria
rst.Close
Set OutApp = Nothing
Set doc = Nothing
Set rst = Nothing
Exit Sub

Lo que ella quería era que se mandase un e-mail automáticamente a una lista de direcciones todos los lunes, con información de una tabla, por eso está en el evento Load de formulario (el primero que se cargaba al abrir la BD)

A ver si te sirve de algo, porque es lo más que te puedo decir..

Gracias por tu respuesta. Hasta mañana no podré probarlo ya que hoy es fiesta. Pero en cuanto lo haya probado te digo como me va. Solo una pregunta más:

Como quiera que en mi trabajo se utilizan varias direcciones de correo distintas e invariablemente se va a enviar desde una de ellas, ¿Dónde debería indicar la cuenta y la contraseña? ¿Tal vez en la línea de código

Set db = OutApp.GETDATABASE("", "la dirección desde la que se manda")?

pero, entonces ¿dónde pongo la contraseña? Lo digo porque, cada vez que queremos mandar un correo, tenemos que abrir el correo electrónico e introducir el usuario y la contraseña...

De nuevo, muchas gracias por tu atención y tu tiempo. Si me puedes ayudar con esta duda, te lo agradeceré muchísimo. Intentaré probar mañana y te cuento como me va...


                    

Como te decía antes, no conozco Lotus Notes, y por tanto ignoro cómo funciona,

Pero imagino que con esta línea

Set db = OutApp.GETDATABASE("", "names.nsf")

viendo el código que a la usuaria le funcionaba, lo que haces es abrir la base de datos donde tienes tus direcciones de correo...

Ok. Gracias de nuevo. Intentaré probarlo mañana y te cuento...

Hola otra vez. Pues no... algo falla (obviamente jejej)

Me da el mismo error que con otros códigos que he intentado, a saber:

"El componente activex no puede crear el objeto" y me señala la siguiente línea:

Set OutApp = CreateObject("Notes.NotesSession")

la verdad es que no sé que puede ocurrir. Lo he intentado con alguno de los códigos que aparecen más abajo en "más respuestas relacionadas" pero de momento no hay manera. Seguiré insistiendo hasta ver si doy con alguna solución (si lo consiguiese, os lo comentaría aquí). Si entre tanto a alguno se os ocurre como puedo solucionar el problema, pues como siempre agradecido.

Muchas gracias por vuestra atención y ayuda.

Lo único que se me ocurre que pruebes es a registrar la referencia a Notes. Para ello abre el editor VBA, en el menú vete a Herramientas->Referencias y busca si hay alguna que haga referencia a Lotus Notes (no sé si la habrá o cómo se puede llamar, pero por probar, no pierdes nada)

Si la hubiera, la marcas. En ese caso, en vez de usar CreateObject, intenta crear una variable de Notus (Dim OutApp As ...), y si esto es posible, el intellisense ya te irá dando opciones para escribir el código...

Hola otra vez. Perdón por no haberme puesto en contacto antes, pero preferí buscar un poco para ver si encontraba la forma de hacerlo antes de seguir volviéndote loco...

Con respecto a lo que me comentas, en referencias encontré iNotes (que supongo que tendrá relación, ya que modificaron algo del correo y, a partir de ese momento, aparecían dos referencias iNotes cuando antes solo había una. Además una de ellas da problemas cuando la marcas - entiendo que será la antigua - y la otra no) El caso es que esa referencia la tenía marcada ya (a ver si el problema va a ser ese...) En cualquier caso, me dices que intente crear una variable y que no use CreateObject. Esto no lo tengo muy claro, ya que el tema de las variables no lo comprendo en absoluto (bueno, realmente no entiendo casi nada de código VBA...) He ido probando con las distintas opciones que me da access y, hasta ahora, las que he probado me daban problemas, salvo Dim OutApp as Mailer, pero tampoco sé muy bien qué hacer después...

Voy a seguir buscando, aquí mismo, más abajo, en respuestas relacionadas, hay un código de nataliagr que también he probado. El problema es que comenta que si da problemas tratemos de agregar notesw_32.reg (creo que era así) y para eso tendré que pedir permiso a mis jefes (a ver si me dejan...) No obstante seguiré probando con lo que tu me dices y con todo lo que vea que puede servir. Si por casualidad encuentro la solución, os lo haré saber por si puede servirle a alguien. Igualmente si se te ocurre alguna cosa más (a ti o a cualquier otro miembro) pues, como siempre muy agradecido.

Gracias una vez más.

No sé si viste estos enlaces, pero el método que explican es prácticamente el mismo, por lo que debiera funcionarte:

http://www.fabalou.com/vbandvba/lotusnotesmail.asp 

http://inanyplace.blogspot.com.es/2012/01/vba-lotus-notes-domino-codigo-de-envio.html  -> En esta vienen dos métodos

http://www.vbafin.com/Lotus-Notes-VBA-code.php -> Aquí te pone la referencia que debes registrar, aunque no sé si sera antigua...

http://stackoverflow.com/questions/31538431/send-an-email-from-access-via-lotus-inotes-installed-on-intranet 

http://programacion.net/articulo/introduccion_a_los_lotus_domino_objects_235 

Yo más ya no te puedo orientar. Si consigues solucionarlo, coméntalo aquí, por si le sirve a otros usuarios.

Muchísimas gracias una vez más. Lo cierto es que no había visto esos enlaces, pero, viéndolos ahora, me da que el problema es la referencia "Lotus Domino Objects", que no aparece por ningún sitio en access. Supongo que será por la falta de alguna DLL o algo así y que se podría solucionar instalando algo que falta por instalar (por ejemplo el "notesw32.reg" que te comentaba antes...)

En cualquier caso, miraré si encuentro la solución con todos los datos que me has dado (hasta el martes no podré hablar con mis jefes, pero, en cuanto lo haga, si me autorizan a instalar lo que falte, probaré). Por supuesto, si encuentro la solución, os lo haré saber (si no la encuentro también, jajaj) ya que, aunque normalmente las respuestas, la mayoría de ellas, provienen de expertos como vosotros, la función de este foro por lo que yo conozco de él, es la de ayudarnos entre todos, y, como bien dices, si le puede servir a otro usuario, pues mejor.

Muchísimas gracias otra vez. Estaré en contacto para comentar lo que encuentre.

Esta pregunta de ayer, igual te ayuda, o le puedes pedir ayuda al experto: Crear código que me permita exportar la vista de formulario con sus datos a como anexo en PDF o Imagen

Perdón por el retraso en contestar, estuve liado en el trabajo y no he podido decirte nada antes. Ante todo, agradecer una vez más tu ayuda. He mirado la pregunta que me comentabas, pero no es exactamente mi problema, ya que, en mi caso, no llega a crear el objeto. No obstante, tal vez pueda orientarme el experto que la respondió, pero no sé cómo dirigirme a él concretamente. ¿Debería pulsar en "comentar" para poder hacer mi pregunta? Más que nada porque no quiero abusar, ya que estaba respondiendo a otro miembro del foro y parecería que me quiero "meter" por medio con mis asuntillos...

Gracias una vez más.

Si entras en el perfil del experto, pinchando en su nombre, verás que hay la opción de "preguntar". Así le preguntas directamente.

Otra opción es la que dices, añadir un comentario en su respuesta pidiendo más información.

Y otra opción sería esta: en la parte de abajo de tu pregunta, verás un rueda dentada, en la que tienes la opción de "preguntar a más expertos". Ahí puedes añadir el nombre del experto para que le llegue tu pregunta, sin necesidad de tener que hacer una nueva.

Respuesta
1

Tengo un ejemplo que te puede servir pero no se cómo adjuntar un archivo aquí .

Sub Envia_Correo(xEmpresa As String, xFile As String, xSubject As String, xBody As String)
Dim Adjunto1 As String
Dim Adjunto2 As String
Dim CorreoReceptor As String
Dim xSucursal As String
Set Db = DBEngine(0)(0)
strSQL = "SELECT Nombre_Sucursal, Email, Ecarpeta "
strSQL = strSQL & "FROM Empresa, Sucursal "
strSQL = strSQL & "WHERE Empresa.ERFC=Sucursal.Empresa "
strSQL = strSQL & "AND Empresa.ERfc = '" & xEmpresa & "'"
Set Rs = Db.OpenRecordset(strSQL)
If Rs.RecordCount > 0 Then
xSucursal = Rs!Nombre_Sucursal
CorreoReceptor = Rs!EMail
path_cfd = Rs!ECarpeta
End If
Adjunto1 = path_cfd & "\pdf\" & xFile
'Es necesario añadir la referencia Microsoft Outlook Library (herramientas/referencias)
Dim OutApp As Outlook.Application
Dim OutMail As Outlook.MailItem
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(olMailItem)
With OutMail
.To = CorreoReceptor
.CC = ""
.BCC = ""
.Subject = xSubject & xSucursal
.Body = xBody
'Se pueden adjuntar ficheros
.Attachments.Add Adjunto1
'.Display 'tambien se puede usar .Send y lo situa en la bandeja de salida
.send
End With
Set OutMail = Nothing
Set OutApp = Nothing
MsgBox "Correo Enviado a: " & CorreoReceptor
'Fin del correo electronico
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas