Отправка молчаливого электронного письма из приложения RN Expo без открытия почтового клиента

#javascript #react-native #api #expo #nodemailer

#javascript #react-native #API #expo #nodemailer

Вопрос:

У меня был поиск, и, похоже, я ничего не могу найти по конкретике моего вопроса.

Мне нужно молча отправить электронное письмо из моего приложения RN Expo на фиксированный адрес электронной почты, поэтому, когда пользователь нажимает «ОТПРАВИТЬ», оно отправляется БЕЗ открытия почтового клиента. Я пытался использовать herokuapp.com API и Node Mailer и добились успеха при отправке с устройства Android, но не с устройства IOS. На IOS отображается ответ о том, что электронное письмо было отправлено, но затем отображается желтое предупреждение.

Мой код отправляет значения, которые были переданы с предыдущего экрана с помощью реквизитов навигации. Одним из значений является подпись, которая, я думаю, может вызывать проблему, поскольку ее base64 и слышал, что на IOS Print EXPO не предоставляет код base64, а предоставляет только локальный URL-адрес, который Node Mailer не принимает и будет принимать только URL-адрес HTTPS и базовый код.

Электронное письмо должно быть отправлено в формате PDF.

Если у кого-нибудь есть какие-либо идеи о решении моей проблемы, вы были бы спасением, я крутил свои колеса в течение нескольких дней!

 import * as Print from 'expo-print';
import * as Sharing from 'expo-sharing';
import * as MailComposer from "expo-mail-composer";
import * as FileSystem from 'expo-file-system';

export default class Materials extends Component {

pdf = async () => {
const { navigation } = this.props;
this.setState({ disabled: true });

const customer_name = navigation.getParam(
  "CustomerName",
  "No Customer Name"
);

const signa = navigation.getParam("sig", "No Signature");

const html = `<h1 style="text-align: center;"><strong>ALL Details</strong></h1>
<p style="text-align: center;">${customer_name}</p>
<img src="${signa}" />

`;

const html2 = `<h1 style="text-align: center;"><strong>ALL Details</strong></h1>
<h1 style="text-align: center;"><strong>ALL Details</strong></h1>
`;
console.log("signa", signa);

const pdf1url = await Print.printToFileAsync({ html });
const pdf1ur2 = await Print.printToFileAsync({ html: html2 });

let pdf1 = await FileSystem.readAsStringAsync(pdf1url.uri, {
  encoding: FileSystem.EncodingType.Base64,
});

let pdf2 = await FileSystem.readAsStringAsync(pdf1ur2.uri, {
  encoding: FileSystem.EncodingType.Base64,
}); // this.setState({ uri: base64 });
await fetch("EXAMPLE.COM/", {
  method: "POST",
  headers: {
    Accept: "application/json",
    "Content-Type": "application/json",
  },

  body: JSON.stringify({
    tomail: ["test@googlemail.com"],
    title: "Your code is 5015",
    subject: "Enter Your subject",
    base64: pdf1,
    text: "some text",
    pdfname: "pdfname",
  }),
})
  .then((response) => {
    alert("email send Successfully");
    response.text();
  })
  .then((err) => console.log(err));

// this.setState({ uri: base64 });
await fetch("EXAMPLE.COM/", {
  method: "POST",
  headers: {
    Accept: "application/json",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    tomail: ["test@googlemail.com""],
    title: "Your code is 5015",
    subject: "Enter your subject",
    base64: pdf2,
    text: "some text",
    pdfname: "pdfname",
  }),
})
  .then((response) => {
    console.log(response.text());
    alert("end email send Successfully");
    response.text();
    this.setState({ disabled: true });
  })
  .then((err) => {
    console.log(err);
    // alert("Email Not send");
    this.setState({ disabled: true });
  });};
  

введите описание изображения здесь

Комментарии:

1. в настоящее время я столкнулся с той же проблемой и последние несколько дней искал решение. Пожалуйста, кто-нибудь????

2. Эй, ребята, не могли бы вы найти какой-нибудь способ пройти через это?! Я тоже застрял на той же странице.

3. Есть ли решение для этого?