wpf - una - hipervínculo dirección de correo electrónico en el cuadro de texto y enviarlo a través de Outlook
hipervinculo de imagen (2)
puedes probar el código XAML
<TextBlock Name="tbReferAFriend" MouseDown="tbReferAFriend_MouseDown">Refer a friend</TextBlock>
código detrás
private void tbReferAFriend_MouseDown(object sender, MouseButtonEventArgs e)
{
try
{
LaunchEmailClientByShellExecute();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + Environment.NewLine + ex.StackTrace);
}
}
[DllImport("shell32.dll")]
public static extern IntPtr ShellExecute(IntPtr hwnd, string lpOperation,
string lpFile, string lpParameters, string lpDirectory, int nShowCmd);
private void launchEmailClientByShellExecute()
{
ShellExecute(IntPtr.Zero, "open", "mailto:username?subject=Read%20This&body=message%20contents", "", "", 4/* sw_shownoactivate */);
}
Estoy trabajando en una aplicación wpf, y tengo una sección de Información del cliente donde puedo registrar la información de mi cliente. En esta sección, utilizo un cuadro de texto que registra la dirección de correo electrónico del cliente. Pero ahora quiero hacer el hipervínculo de la dirección de correo electrónico y vincular la dirección de correo electrónico a través del correo electrónico de Outlook, por ejemplo, si hago clic en la dirección de correo electrónico, se abre el correo electrónico de Outlook automáticamente para que pueda enviar correos electrónicos a través de Outlook. Gracias.
Lo que quiero es una etiqueta o un bloque de texto cuyo texto sea Correo electrónico a la izquierda (no es necesario que se vincule con el texto en el cuadro de texto), un cuadro de texto a la derecha donde puede escribir una dirección de correo electrónico. Después de escribir una dirección de correo electrónico válida en el cuadro de texto, puede hacer clic en la dirección de correo electrónico y se abrirá Outlook automáticamente. En el campo A de la perspectiva, la dirección de correo electrónico es lo que ingresó. (Los comentarios son tan largos en la última pregunta, por lo que la hago una nueva pregunta, el enlace de la pregunta anterior es la dirección de correo electrónico y envía un correo electrónico a través de Outlook
<TextBlock Text="Email" Grid.Row="11" x:Name="lblEmail" VerticalAlignment="Top"/>
<TextBox Grid.Column="1" Grid.Row="11" x:Name="txtEmail" VerticalAlignment="Top"
TextDecorations="UnderLine" Foreground="Blue" Text="{Binding
Email, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True,
ValidatesOnExceptions=True, NotifyOnValidationError=True}">
</TextBox>
OK, vamos a ir otra vez ... primero tenemos un TextBox
que el usuario ingresa una dirección de correo electrónico:
<TextBox x:Name="EmailTextBox" />
Entonces tenemos un objeto Hyperlink
cuya propiedad NavigateUri
está vinculada a los Textbox.Text
campo EmailTextBox
objeto EmailTextBox
:
<Hyperlink RequestNavigate="Hyperlink_RequestNavigate" NavigateUri="{Binding Text,
ElementName=EmailTextBox, UpdateSourceTrigger=PropertyChanged}">
<TextBlock Text="Click here to e-mail" />
</Hyperlink>
Luego tenemos el controlador RequestNavigateEvent
que valida la dirección de correo electrónico (la expresión regular se tomó de esta publicación ):
public void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e)
{
Hyperlink hyperlink = sender as Hyperlink;
if (hyperlink == null) return;
if (Regex.IsMatch(hyperlink.NavigateUri.ToString(), @"^([/w/./-]+)@([/w/-]+)((/.(/w){2,3})+)$"))
{
string address = string.Concat("mailto:", hyperlink.NavigateUri.ToString());
try { System.Diagnostics.Process.Start(address); }
catch { MessageBox.Show("That e-mail address is invalid.", "E-mail error"); }
}
}
Ahora, todavía no he podido probar nada de esto, por lo que es posible que tenga que corregir un par de pequeños errores, pero esto es más o menos lo que tiene que hacer. Siéntase libre de agregar comentarios, pero no permita que la sección de comentarios sea más grande que la sección de preguntas esta vez. ;)
ACTUALIZACIÓN >>>
Bien, entonces el problema fue que hyperlink.NavigateUri
es en realidad un objeto Uri
y no una string
por lo que debemos llamar a ToString()
en él.
En caso de que lo necesite, puede reemplazar la línea en su controlador Hyperlink_RequestNavigate
con esta línea para establecer el asunto del correo electrónico:
string address = string.Concat("mailto:", hyperlink.NavigateUri.ToString(),
"?subject=This is the subject");
Esto se puede ampliar para agregar parte (o todo) del cuerpo también:
string address = string.Concat("mailto:", hyperlink.NavigateUri.ToString(),
"?subject=This is the subject&body=Dear Sir/Madam,");