Estimados lectores, ha sido una experiencia agradable el
hacer este blog y tener algunos lectores que comparten el gusto por la
programación; actualmente estoy empezando otro proyecto, muy personal, con tecnología web que espero compartir con toda la comunidad de
programadores y necesito recursos porque es algo muy personal y mi situación
financiera no es muy buena.
Si alguien desearía
apoyarme tengo una tarjeta Oxxo Saldazo
con el número: 4766-8408-7508-1593,
cualquier apoyo lo pueden hacer en cualquier tienda Oxxo o en Banamex, les
agradezco y que sus proyectos lleguen a buen fin.
la rutina siguiente es larga pero eso es para que tengan mas o menos la vision del contexto en que estoy trabajando.
el objetivo es mandar una serie de correos a traves de un datagrid por medio de outlook, o sea, las ordenes que esten marcadas con una bandera se deben enviar, pero al recorrer ese datagrid donde la tabla subyacente es dtabclientes, me envia un error despues de enviar el primer correo:"se movio o eliminoel elemento "
lo resolvi volviendo a limpiar el objmail y creando el item , pero me imagino que alguien que tenga mas experiencia en el envio de correo por outllok tendra una mejor solucion o porque me manda ese error
pongan atencion a donde dice OJO
Private Sub cmdout_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdout.Click
'empieza
Dim m_OutLook As Outlook.Application
Dim sorden As String = ""
Dim patharchivo As String
Try
''emieza
'Creamos un Objeto tipo Mail
Dim objMail As Outlook.MailItem
'Inicializamos nuestra apliación OutLook
m_OutLook = New Outlook.Application
'Creamos una instancia de un objeto tipo MailItem
' OJO ATENCION AL CREATEITEM
objMail = CType(m_OutLook.CreateItem(Outlook.OlItemType.olMailItem), Outlook.MailItem)
Dim rutacorreos As String = cldatosorig.Traerutacorreo
Dim nombrepdf As String
''empieza a grabar la fecha y el usuario que autorizo
For Each dr As DataRow In dtabcliente.Rows
If IsDBNull(dr("selenviocorreo")) Then
sorden = dr("orden").ToString
Else
Dim ajmbandera As Boolean = CType(dr("selenviocorreo"), Boolean)
'verificar que exista el archivo
sorden = dr("orden").ToString
nombrepdf = "orden:" & dr("orden").ToString & "." & Txtext.Text
patharchivo = UCase(rutacorreos & dr("orden").ToString & "." & Me.Txtext.Text)
Dim Rta As Integer
If File.Exists(patharchivo) Then
If CType(dr("selenviocorreo"), Boolean) Then 'solo pone fecha a las autorizadas
'comprueba si no ha sido autorizado antes
Dim usuantes As String
usuantes = dr("usuarenviocorreo").ToString
Dim cvalor As String
'calcula la hora para grabar con separacion de :
Dim iminutos As String = CType(Date.Now.TimeOfDay.Minutes(), String)
If Len(iminutos) = 1 Then 'agregarun cero porque es un solo digito
cvalor = Date.Now.TimeOfDay.Hours & ":0" & iminutos ' esto te da la hora y minutos
Else
cvalor = Date.Now.TimeOfDay.Hours & ":" & Date.Now.TimeOfDay.Minutes()
End If
If Len(usuantes) = 0 Then
If Me.TXTPARA.Text = String.Empty Then
'OJO AQUI COLOCA LA CADENA DEL CORREO O CORREOS A ENVIAR
objMail.To = dr("ajmmailrep").ToString
Else
objMail.To = Me.TXTPARA.Text
End If
objMail.Subject = Me.Txtasunto.Text.ToString & dr("orden").ToString
objMail.Body = Me.txtmensaje.Text & dr("orden").ToString
If Me.TXTPARA.Text = String.Empty Then
Rta = MsgBox("¿Realmente desea enviar el Mail? orden:" & dr("orden").ToString _
& " al correo:" & dr("ajmmailrep").ToString, MsgBoxStyle.YesNo)
Else
Rta = MsgBox("¿(PRUEBA)Realmente desea enviar el Mail? orden:" & dr("orden").ToString _
& " al correo de PRUEBA:" & Me.TXTPARA.Text, MsgBoxStyle.YesNo)
End If
'Si queremos enviar un archivo adjunto usamos este codigo…
Dim sSource As String = patharchivo
Dim sBodyLen As String = objMail.Body.Length.ToString
Dim oAttachs As Outlook.Attachments = objMail.Attachments
Dim oAttach As Outlook.Attachment
oAttach = oAttachs.Add(sSource, , CType(sBodyLen, Single) + 1, nombrepdf)
If Rta = 6 Then
'Enviamos nuestro Mail
objMail.Send()
'OJO DESPUES DE ESTO ENVIA EL ERROR SE MOVIO O ELIMINO EL ELEMENTO POR ESTA RAZON VUELVO A PONERLE NOTHING Y VUELVO A CREAR UN ITEM
objMail = Nothing
objMail = CType(m_OutLook.CreateItem(Outlook.OlItemType.olMailItem), Outlook.MailItem)
'Desplegamos un mensaje indicando que todo fue exitoso
If Me.TXTPARA.Text = String.Empty Then
MessageBox.Show("Envío exitoso.orden:" & dr("orden").ToString, "Enviar Mail", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
dr("fechaenviocorreo") = Date.Now
dr("horaenviocorreo") = cvalor
dr("usuarenviocorreo") = ajmusuario
Else
MessageBox.Show("Envío PRUEBA exitoso.orden:" & dr("orden").ToString, "Enviar Mail", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End If
ElseIf Rta = 7 Then
MessageBox.Show("Envío cancelado", "Enviar Mail", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End If
Else 'quiere decir que ya grabo algo antes, entonces graba las fechas como modificacion
MessageBox.Show("Este correo ya fue enviado anteriormente; orden:" & dr("orden").ToString)
'dr("fechautmodif") = Date.Now
'dr("horaautmodif") = cvalor
'dr("usuautmodif") = ajmusuario
End If
End If
Else
MessageBox.Show("El archivo Pdf de esta orden no existe, orden:" & sorden)
End If
End If
Next
'termina grabar fecha y usuario
If Me.TXTPARA.Text = String.Empty Then
dacliente.Update(dtabcliente)
dtabcliente.AcceptChanges()
End If
Catch ex As Exception
'Si se produce algun Error
MessageBox.Show(ex.ToString, "Error!orden:" & sorden, MessageBoxButtons.OK)
'MessageBox.Show("Error al enviar mail")
Finally
m_OutLook = Nothing ' Destruimos el objeto (recoger la basura…)
End Try
End Sub
No hay comentarios:
Publicar un comentario