code para obtener la ip.
@echo off
ipconfig >> ip.txt
pause
El bueno de @
warcry se tiraría de los pelos al leer esa respuesta... xD
IpConfig no es una solución viable en la mayoría de casos, puesto que depende del tipo de conexión y la configuración de ésta. De nada sirve en la mayoría de casos usar IpConfig si te conectas a través de un router y quieres obtener la IP pública/externa... que es la que normálmente se querrá obtener en estos casos; IpConfig solo mostrará la IP privada (ej. 192.168.1.3)
PD: Hay que informarse y verificar las cosas un poco más antes de ofrecer respuesta a todo el mundo, @
Aincrad.
Respecto a la pregunta principal,
Batch no fue diseñado para satisfacer tareas como esta. Como ya te han comentado, para enviar un e-mail necesitas recurrir a otros lenguajes de programación o herramientas command-line de terceros desde
Batch. Pero todo eso es complicarse la vida cuando tienes a tu disposición un lenguaje de programación tan flexible como
PowerShell.
He escrito este código de ejemplo con el que puedes obtener la IP pública haciendo una petición al servicio gratuito de
http://checkip.dyndns.org, y también para enviar un correo mediante GMail u Outlook.com (Hotmail). Las funciones de este código fuente en VB.NET han sido extraidas de mi framework comercial
ElektroKit Framework para .NET.
( recuerda que para poder enviar correos mediante GMail primero es necesario permitir el acceso a aplicaciones en la configuración de tu cuenta de Google:
https://myaccount.google.com/lesssecureapps )
script.ps1# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# ElektroKit Framework for .NET can be bought here: #
# #
# https://codecanyon.net/item/elektrokit-class-library-for-net/19260282 #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
$vbCode = @'
Imports System
Imports System.IO
Imports System.Net
Imports System.Net.Mail
Imports System.Xml.Linq
Namespace ElektroKitFramework
Public NotInheritable Class NetworkUtil
Private Sub New()
End Sub
Public Shared Function GetPublicIp() As String
Dim req As WebRequest = WebRequest.Create("http://checkip.dyndns.org/")
Using resp As WebResponse = req.GetResponse()
Using sr As New StreamReader(resp.GetResponseStream)
Dim html As XDocument = XDocument.Parse(sr.ReadToEnd())
Dim body As String = html.<html>.<body>.Value
Return body.Substring(body.LastIndexOf(" ")).Trim()
End Using
End Using
End Function
Public Shared Sub SendGoogleMail(cred As NetworkCredential, [to] As String, subject As String, body As String)
Using msg As New MailMessage(cred.UserName, [to], subject, body)
Using client As New SmtpClient()
With client
.Host = "smtp.gmail.com"
.Port = 587
.EnableSsl = True
.Credentials = cred
.DeliveryMethod = SmtpDeliveryMethod.Network
.Timeout = CInt(TimeSpan.FromSeconds(60).TotalMilliseconds)
End With
client.Send(msg)
End Using
End Using
End Sub
Public Shared Sub SendOutlookMail(cred As NetworkCredential, [to] As String, subject As String, body As String)
Using msg As New MailMessage(cred.UserName, [to], subject, body)
Using client As New SmtpClient()
With client
.Host = "smtp.live.com"
.Port = 587
.EnableSsl = True
.Credentials = cred
.DeliveryMethod = SmtpDeliveryMethod.Network
.Timeout = CInt(TimeSpan.FromSeconds(60).TotalMilliseconds)
End With
client.Send(msg)
End Using
End Using
End Sub
End Class
End Namespace
'@
$vbType = Add-Type -TypeDefinition $vbCode `
-CodeDomProvider (New-Object Microsoft.VisualBasic.VBCodeProvider) `
-PassThru `
-ReferencedAssemblies "Microsoft.VisualBasic.dll", `
"System.dll", "System.IO", "System.Net", `
"System.Xml", "System.Xml.Linq" `
| where { $_.IsPublic }
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
$publicIp = [ElektroKitFramework.NetworkUtil]::GetPublicIp()
Write-Host ( [System.String]::Format("My Public IP Address Is: {0}", $publicIp) )
$cred = New-Object -TypeName System.Net.NetworkCredential -ArgumentList "username@gmail.com", "password"
$mailTo = "destination@server.com"
Write-Host ( [System.String]::Format("Sending Mail From: ""{0}"" To: ""{1}""", $cred.UserName, $mailTo) )
try {
[ElektroKitFramework.NetworkUtil]::SendGoogleMail( $cred, $mailTo, "My Public Ip Address", $publicIp )
# [ElektroKitFramework.NetworkUtil]::SendOutlookMail( $cred, $mailTo, "My Public Ip Address", $publicIp )
Write-Host "Mail sent successfully."
} catch {
Write-Host ( [System.String]::Format("An Exception Occured With Message: ""{0}""", $_.Exception.Message) )
}
Exit(0)
Resultado de ejecución:
PD: Si usas otro servidor SMTP tan solo tienes que cojer el método
SendGoogleMail o
SendOutlookMail y adaptar/modificar los parámetros de configuración...
Saludos.