Вопрос по email-address, wpf, hyperlink – адрес электронной почты гиперссылки в текстовом поле и отправить его через Outlook

1

Я работаю над приложением wpf, и у меня есть раздел информации о клиентах, где я могу записать информацию о своих клиентах. В этом разделе я использую текстовое поле записи клиентаадрес электронной почты. Но теперь я хочу сделать ссылку на адрес электронной почты гиперссылкой и связать адрес электронной почты с помощью электронной почты Outlook, скажем, если я щелкну адрес электронной почты, он автоматически откроет электронную почту Outlook, чтобы я мог отправлять электронную почту с помощью Outlook. Благодарю.

То, что я хочу, это метка или текстовый блок, чей текстЭл. адрес слева (не нужно привязываться к тексту в текстовом поле), текстовое поле справа, где вы можете ввести адрес электронной почты. После того, как вы введете действительный адрес электронной почты в текстовое поле, вы можете щелкнуть адрес электронной почты, и он автоматически откроет Outlook. вк поле зрения, адрес электронной почты - это то, что вы ввели. (В последнем вопросе комментарии слишком длинные, поэтому я задаю новый вопрос, ссылка на старый вопроссвязать адрес электронной почты и отправить письмо через Outlook

 
    
 

Ваш Ответ

2   ответа
4

Хорошо, давайу нас есть еще один путь ... сначала у нас естьTextBox что пользователь вводит адрес электронной почты в:


Тогда у нас естьHyperlink объект которогоNavigateUri свойство является данными, привязанными кTextbox.Text полеEmailTextBox объект:


    

Тогда у нас естьRequestNavigateEvent обработчик, который проверяет адрес электронной почты (регулярное выражение было взято изэта почта):

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"); }
    }
}

Теперь я до сих порЯ не смог протестировать ничего из этого, поэтому вам, возможно, придется самостоятельно исправить пару небольших ошибок, но это примерно то, что вам нужно сделать. Не стесняйтесь добавлять комментарии, но на этот раз не делайте раздел комментариев больше, чем раздел вопросов. ;)

ОБНОВЛЕНИЕ >>>

Итак, проблема была в том, чтоhyperlink.NavigateUri на самом делеUri объект, а неstring поэтому нам нужно позвонитьToString() в теме.

На всякий случай, если вам это нужно, вы можете заменить строку в вашемHyperlink_RequestNavigate Обработчик с этой строкой устанавливает тему письма:

string address = string.Concat("mailto:", hyperlink.NavigateUri.ToString(), 
"?subject=This is the subject");

Это может быть дополнительно расширено для добавления части (или всего) тела тоже:

string address = string.Concat("mailto:", hyperlink.NavigateUri.ToString(), 
"?subject=This is the subject&body=Dear Sir/Madam,");
view/organisationv/[email protected]» являетсяне адрес электронной почты ... попробуйте просто набрать '[email protected]» в.TextBox Sheridan
Я изменил ваш код ** if (Regex.IsMatch (hyperlink.NavigateUri, @ "^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$»)) ** до ** if (Regex.IsMatch (hyperlink.NavigateUri.ToString (), @ "^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$»)), ошибки исчезли. Но когда я набираю адрес электронной почты и нажимаю гиперссылку, он открывает Outlook, но выдает ошибку, скажем, ** IOException был необработан Не удается найти ресурс »view/organisationv/[email protected]», Я провел исследование по этому поводу, но большинство из них связано с ** IOException не удалось обработатьApp.xaml» ** не об этой проблеме. DanielXu
Кроме того, я обнаружил, что мне нужно включитьe.Handled = true; в концеHyperlink_RequestNavigate событие. В противном случае мое приложение все равно будет пытаться перейти к URI после того, как оно уже открыло почтовый клиент. Ben
Есть ли причина, по которой вы используетеsender as Hyperlink вместо использования аргументов события?e.Uri.ToString() Ben
0

Вы можете попробовать код XAML

Refer a friend

код позади

 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 */);
            }

от :https://social.msdn.microsoft.com/Forums/vstudio/en-US/dcbaaced-97b3-4276-bf95-960e77cb6c03/how-to-launch-default-mail-client-in-wpf-applications?forum= МОФ

Похожие вопросы