如何启动和打开电子邮件客户端反应-本地?

我不想写电子邮件。我只是想能够在用户的设备(iOS 和 Android)上从一个反应本地应用程序启动主电子邮件应用程序。

场景: 我会发送一个验证电子邮件给用户注册。

119255 次浏览

You can use react natives Linking module for this purpose. Here is a link to the module https://facebook.github.io/react-native/docs/linking.html.

例子: Linking.openURL('mailto:example@gmail.com?subject=example&body=example')

我认为下面的 npm 模块应该具有您所需要的内容。不幸的是,它使用了本机库,因此您必须运行一些反应本机链接。

https://www.npmjs.com/package/react-native-mail

本机打开邮件函数

<Button onPress={() => Linking.openURL('mailto:support@example.com') }
title="support@example.com" />

用主题和主体对本地开放邮件函数作出反应

<Button onPress={() => Linking.openURL('mailto:support@example.com?subject=SendMail&body=Description') }
title="support@example.com" />

反应本机打开 URL

<Button onPress={() => Linking.openURL('https://www.google.co.in/') }
title="www.google.co.in" />

##Don't forget to import

import { Linking } from 'react-native'

注意: 在 iOS 模拟器中不支持,因此必须在设备上进行测试。

<TouchableOpacity onPress={()=>{
Linking.openURL('mailto:support@domain.com?subject=mailsubject&body=mailbody');
}}>
<View><Text>Contact Us</Text></View>
</TouchableOpacity>

这对我有用!

在 iOS 上打开电子邮件应用程序 :

 Linking.canOpenURL('message:')
.then(supported => {
if (!supported) {
console.log('Cant handle url')
} else {
return Linking.openURL('message:')
}
})
.catch(err => {
console.error('An error occurred', err)
})

您可以使用此方法发送打开任何电子邮件客户端,并发送一封带有一些数据的电子邮件。

export const sendEmailViaEmailApp = (toMailId, subject, body) => {
if (!isUndefined(toMailId)) {
let link = `mailto:${toMailId}`;
if (!isUndefined(subject)) {
link = `${link}?subject=${subject}`;
}
if (isUndefined(subject)) {
link = `${link}?body=${body}`;
} else {
link = `${link}&body=${body}`;
}


Linking.canOpenURL(link)
.then(supported => {
if (supported) {
// 'mailto:support@example.com?subject=Billing Query&body=Description'
Linking.openURL(link);
}
})
.catch(err => console.error('An error occurred', err));
} else {
console.log('sendEmailViaEmailApp -----> ', 'mail link is undefined');
}
};

Place this method inside a utils class and use this method where ever you want

不幸的是 后面的答案没有一个是正确的

我不想写电子邮件。我只是想能够启动主电子邮件应用程序

我希望有同样的行为:

  1. Sign-In Screen with a button Open Email App
  2. 用户打开他的电子邮件应用程序
  3. 他可以点击魔法链接回到应用程序中

差不多和带有魔法链接的 Slack Onboard 一样。

enter image description here

我使用库 反应-本地-电子邮件-链接找到了一个解决方案。 您可以打开一个电子邮件客户端从反应本机(为’魔术链接’类型的功能)。

  • 可以在 Android 上运行。
  • 如果你想在 iOS 上尝试,你需要一个真正的设备,因为在 iOS 模拟器上没有 mail.app

启动电子邮件客户端使用本地邮件反应。它会自动打开电子邮件客户端。 Https://www.npmjs.com/package/react-native-mail

如果你想要一个与 Android 和 iOS.https://www.npmjs.com/package/react-native-email-action兼容的包装器

IOS 与其他电子邮件应用程序一起工作。

import { Linking } from 'react-native'


React Native Open Mail


<TouchableOpacity onPress={() => Linking.openURL('mailto:support@example.com')}>
<Text>support@example.com</Text>
</TouchableOpacity>




React Native Open Mail With Subject & Body


<TouchableOpacity onPress={() => Linking.openURL('mailto:support@example.com?subject=sendmail&body=details')}>
<Text>support@example.com</Text>
</TouchableOpacity>


this will only work in real device. not working in iOS simulator.


Expo.io 纯 js/typecript 解决方案:

import * as IntentLauncher from 'expo-intent-launcher';


// ...


public openMailClientIOS() {
Linking.canOpenURL('message:0')
.then(supported => {
if (!supported) {
console.log('Cant handle url')
} else {
return Linking.openURL('message:0')
.catch(this.handleOpenMailClientErrors)
}
})
.catch(this.handleOpenMailClientErrors)
}


public openMailClientAndroid() {


const activityAction = 'android.intent.action.MAIN'; // Intent.ACTION_MAIN
const intentParams: IntentLauncher.IntentLauncherParams = {
flags: 268435456, // Intent.FLAG_ACTIVITY_NEW_TASK
category: 'android.intent.category.APP_EMAIL' // Intent.CATEGORY_APP_EMAIL
};


IntentLauncher.startActivityAsync(activityAction, intentParams)
.catch(this.handleOpenMailClientErrors);
}

可以在 iOS 和 Mail 中工作,也可以在 Android 中工作

Android 意图文档: https://developer.android.com/reference/android/content/Intent#ACTION_MAIN

世博会意向发射器文档: https://docs.expo.io/versions/latest/sdk/intent-launcher/

对于开放邮件应用程序,我已经使用这样,它的工作为我

const subject = "Mail Subject";
const message = "Message Body";
Linking.openURL(`mailto:support@domain.com?subject=${subject}&body=${message}`)
import { View,Linking,Text, Image,TouchableOpacity } from 'react-native';


const emailId= 'care@flipkart.com'


const onPressEmailClick = (email) => {
Linking.openURL('mailto:'+email)
//  Linking.openURL('mailto:Care@amazon.com')
}


<View style=\{\{ flexDirection: "row", alignItems: "center", justifyContent: "center" }} >


<Text style=\{\{ textAlign: "center", marginTop: 15, color: "black" }} >
{"For any query mail us "}
</Text>


<TouchableOpacity
onPress={() => onPressEmailClick(emailId)} >
<Text style=\{\{ textAlign: "center", marginTop: 15, color: "black", textDecorationLine: 'underline' }} >
{emailId}
</Text>
</TouchableOpacity>

你可以用这个作为你的 URL googlegmail://打开 gmail 应用程序,这是 gmail 的方案。当你的应用程序第一次打开 gmail 时,它会打开一个提示“想要打开 gmail”,用户可以点击确定或取消。这种行为只发生一次。

这不会打开电子邮件作曲家,但只是直接到用户的主要收件箱。