En la API Xamarin.Essential de esta semana, echamos un vistazo a la API de (Email) correo electrónico que nos permitirá abrir la aplicación de correo electrónico predeterminada y precargada con destinatarios, asunto y cuerpo del mensaje.
Para lo cual crearemos el proyecto Xamarin.Essential.Email con Visual Studio 2019 que será nuestro primer ejemplo practico con Xamarin.Essential.
Requisitos para el ejemplo práctico:
Microsoft Visual Studio Community 2019
Xamarin.Froms - XAML
Xamarin.Essentials - API
Sistema cliente de envío - Gmail
Interfaz:
Después de haber creado el proyecto, iniciaremos con la parte del diseño para cual abriremos el archivo MainPage.xaml e ingresamos lo siguiente:
Desarrollo de código:
Ahora creamos una tarea asíncrona de nombre SendEmail(...) con los siguientes parámetros de entrada subject, body y recipients:
Luego crea la tarea asíncrona ValidateForm(), encargado de validar las propiedades de envío de mensaje:
Resultado:
Comparto el vídeo 📹 acerca de lo desarrollado de acuerdo a la descripción de este post publicado, todas la pruebas a nivel de Diseño ✨ y CodeBehind C# 💬 fueron validados en plataforma 📱Android.
Mayor información disponible en:
👉 channel9.msdn.com
👉 docs.microsoft.com
Descarga la fuente desde:
Nuevamente agradecer 😊 de antemano a todos por la acogida de este nuevo post publicado, bendiciones 🙏 y fuerte 💪 abrazo...!!!
Después de haber creado el proyecto, iniciaremos con la parte del diseño para cual abriremos el archivo MainPage.xaml e ingresamos lo siguiente:
<?xml
version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:AwesomeApp"
x:Class="AwesomeApp.MainPage">
<StackLayout>
<Image Source="HadsonparLogo.jpg"
HorizontalOptions="Center"
Margin="10"/>
<Label Text="Visiten
el Blog"
TextColor="Blue"
TextDecorations="Underline"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand"
FontSize="Title">
<Label.GestureRecognizers>
<TapGestureRecognizer Command="{Binding TapCommand}" CommandParameter="http://blog.hadsonpar.com/"
/>
</Label.GestureRecognizers>
</Label>
<Label Text="😎"
HorizontalOptions="Center"
FontSize="Title"/>
<Label Text="Publicamos
temas acerca de las siguientes tecnologías:"
HorizontalOptions="Center"/>
<Label Text="ORACLE
| MICROSOFT | OPEN SOURCE | CLOUD"
HorizontalOptions="Center"/>
<Label Text="Pequeñas
aplicaciones, pero de gran impacto 😊"
TextColor="Turquoise"
FontSize="Subtitle"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand"/>
<Label Text="🌐
Enviar Correo electrónico API de Xamarin.Essentials"
Margin="0,0,0,10"
FontAttributes="Bold"
FontSize="Small"
TextColor="#36FF33"
HorizontalTextAlignment="Center"/>
<Entry x:Name="txtTo" Placeholder="tu-email@dominio.com"
/>
<Entry x:Name="txtSubject" Placeholder="Asunto" />
<Editor x:Name="txtBody" HeightRequest="50"/>
<Button x:Name="btnSend" Text="Enviar" Clicked="btnSend_Clicked"/>
<Label Text="🙌
Welcome to Xamarin.Forms!"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand"
/>
<Button Text="Click me" Clicked="Button_Clicked" />
</StackLayout>
</ContentPage>Desarrollo de código:
Seguidamente abrir el archivo o clase MainPage.xaml.cs y agregamos la referencia Xamarin.Essentials en la clase en mención, así mismo creamos las siguientes instrucciones (tareas y métodos asíncronos):
using Xamarin.Essentials;
/// <summary>
/// Tarea asincrona para realizar el envío del mensaje
/// </summary>
/// <param name="subject">Asunto del email</param>
/// <param name="body">Cuerpo del mensaje del email</param>
/// <param
name="recipients">Destinatarios</param>
/// <returns></returns>
private async Task
SendEmail(string subject, string body, List<string> recipients)
{
try
{
//Propiedades
del mensaje
var message = new
EmailMessage
{
Subject = subject,
Body = body,
To = recipients,
};
//API que se encarga de abrir el cliente como el Gmail,
Outlook u otros para realizar el envío del mensaje
await Email.ComposeAsync(message);
}
catch (FeatureNotSupportedException fnsEx)
{
// Email
is not supported on this device
await DisplayAlert("Error", fnsEx.ToString(), "OK");
}
catch (Exception ex)
{
// Some
other exception occurred
await DisplayAlert("Error", ex.ToString(), "OK");
}
}Luego crea la tarea asíncrona ValidateForm(), encargado de validar las propiedades de envío de mensaje:
/// <summary>
/// Validar las propiedades de la pantalla de envio de email
/// </summary>
/// <returns></returns>
private async Task<bool> ValidateForm()
{
//Valida si el
valor en el Entry txtTo se encuentra vacio o es igual a Null
if (String.IsNullOrWhiteSpace(txtTo.Text))
{
await this.DisplayAlert("Advertencia", "El campo tu-mail es obligatorio.", "OK");
return false;
}
else {
//Valida
que el formato del correo sea valido
bool isEmail = Regex.IsMatch(txtTo.Text, @"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z", RegexOptions.IgnoreCase);
if (!isEmail)
{
await this.DisplayAlert("Advertencia", "El formato del correo electrónico
es incorrecto, revíselo e intente nuevamente.", "OK");
return false;
}
}
//Valida si el
valor en el Entry txtSubject se encuentra vacio o es igual a Null
if (String.IsNullOrWhiteSpace(txtSubject.Text))
{
await this.DisplayAlert("Advertencia", "El campo Asunto es obligatorio.", "OK");
return false;
}
//Valida si el
valor en el Entry se encuentra vacio o es igual a Null
if (String.IsNullOrWhiteSpace(txtBody.Text))
{
var res = await
DisplayAlert("Advertencia", "Aún no se a ingresado el
mensaje, esta seguro de enviarlo", "OK", "Cancel");
if (res)//True si se preciona OK, se esta
confirmado que el correo se enviará sin mensaje
{
return true;
}
else
{//False
si se preciona Cancel, y se debe ingresar el mensaje a enviar
return false;
}
}
return true;
}
Para finalizar creamos el método btnSend_Clicked encargado de realizar en envío, previa invocación a la tarea de ValidateForm(), si la validación retorna verdadero (true) invocamos a la tarea SendEmail(...):
/// <summary>
/// Botón encargado de realizar en envío
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
async void
btnSend_Clicked(object sender,
System.EventArgs e)
{
if (await
ValidateForm()) {
List<string> toAddress = new List<string>();
toAddress.Add(txtTo.Text);
await SendEmail(txtSubject.Text, txtBody.Text, toAddress);
}
}
Resultado:
Comparto el vídeo 📹 acerca de lo desarrollado de acuerdo a la descripción de este post publicado, todas la pruebas a nivel de Diseño ✨ y CodeBehind C# 💬 fueron validados en plataforma 📱Android.
👉 channel9.msdn.com
👉 docs.microsoft.com
Descarga la fuente desde:
Nuevamente agradecer 😊 de antemano a todos por la acogida de este nuevo post publicado, bendiciones 🙏 y fuerte 💪 abrazo...!!!
0 Comentarios