react-native-smtp-mailer
Version:
Send emails by connecting to smtp server+attachments, using android javamail and ios mailcore2
179 lines (127 loc) • 5.59 kB
Markdown
# react-native-smtp-mailer
## Getting started
`$ npm install react-native-smtp-mailer --save`
*If you use RN version less than 0.60, then you need to link the native modules, either automatically or manually*
<details>
<summary> Link Instructions for RN versions less than 0.60 </summary>
#### Mostly automatic installation
`$ react-native link react-native-smtp-mailer`
#### Manual installation
##### iOS
1. In XCode, in the project navigator, right click `Libraries` ➜ `Add Files to [your project's name]`
2. Go to `node_modules` ➜ `react-native-smtp-mailer` and add `RNSmtpMailer.xcodeproj`
3. In XCode, in the project navigator, select your project. Add `libRNSmtpMailer.a` to your project's `Build Phases` ➜ `Link Binary With Libraries`
4. Run your project (`Cmd+R`)<
Inside ios folder, if Podfile doesn't exist, create a Podfile with `pod init`.
And add the following inside your Podfile:
```
pod 'mailcore2-ios'
```
Then run:
```
pod install
```
##### Android
1. Open up `android/app/src/main/java/[...]/MainApplication.java`
- Add `import com.rnsmtpmailer.RNSmtpMailerPackage;` to the imports at the top of the file
- Add `new RNSmtpMailerPackage()` to the list returned by the `getPackages()` method
2. Append the following lines to `android/settings.gradle`:
```
include ':react-native-smtp-mailer'
project(':react-native-smtp-mailer').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-smtp-mailer/android')
```
3. Insert the following lines inside the dependencies block in `android/app/build.gradle`:
```
implementation project(':react-native-smtp-mailer')
```
</details>
## Extra steps
### Android
Maybe you need to add (if you encounter error with mimetypes during build), in <b><i>android/app/build.gradle:</i></b>
```
android {
...
packagingOptions {
exclude 'META-INF/mimetypes.default'
exclude 'META-INF/mailcap.default'
}
}
```
## Usage
```javascript
import RNSmtpMailer from "react-native-smtp-mailer";
RNSmtpMailer.sendMail({
mailhost: "smtp.gmail.com",
port: "465",
ssl: true, // optional. if false, then TLS is enabled. Its true by default in android. In iOS TLS/SSL is determined automatically, and this field doesn't affect anything
username: "usernameEmail",
password: "password",
fromName: "Some Name", // optional
replyTo: "usernameEmail", // optional
recipients: "toEmail1,toEmail2",
bcc: ["bccEmail1", "bccEmail2"], // optional
subject: "subject",
htmlBody: "<h1>header</h1><p>body</p>",
attachmentPaths: [
RNFS.ExternalDirectoryPath + "/image.jpg",
RNFS.DocumentDirectoryPath + "/test.txt",
RNFS.DocumentDirectoryPath + "/test2.csv",
RNFS.DocumentDirectoryPath + "/pdfFile.pdf",
RNFS.DocumentDirectoryPath + "/zipFile.zip",
RNFS.DocumentDirectoryPath + "/image.png"
], // optional
attachmentNames: [
"image.jpg",
"firstFile.txt",
"secondFile.csv",
"pdfFile.pdf",
"zipExample.zip",
"pngImage.png"
], // required in android, these are renames of original files. in ios filenames will be same as specified in path. In a ios-only application, no need to define it
})
.then(success => console.log(success))
.catch(err => console.log(err));
```
RNFS is from <a href="https://github.com/itinance/react-native-fs">react-native-fs</a> library, used just to demonstrate a way of accessing files in phone filesystem.
# Documentation
#### `mailhost: string`
The smtp provider host. i.e: `"smtp.gmail.com"`
##### `port: string`
The port that the smtp provider listens to, i.e: `"465"`
#### username: string`
The username to authenticate with stmp host, i.e: `"foo@foobar.com"`
#### `password: string`
The password to authenticate with stmp host
#### `recipients: string`
Comma separated values if want to add multiple recipients i.e: `"foo@bar.com,bar@foo.com"`
#### `subject: string`
The subject of the email
#### `htmlBody: string`
The body of the email. i.e: `"<h1>Sample Header</h1><p>Lorem ipsum dolor sit amet...</p>"`
#### `fromName?: string`
Alias of the username email address, to be shown in the recipients as the sender's name. By default it's the same as the username field i.e: `"foo.alias@foobar.com"` *Note:* This is different than the reply-to email address. If reply-to is not specified, the reply-to will still use the username email
#### `replyTo?: string`
If not specified, the reply-to email is the username one i.e: `"fooReply@foobar.com"`
#### `ssl?: boolean`
In iOS TLS/SSL is determined automatically, so either true or false, it doesn't affect it
By default it is true in android. If false then TLS is enabled.
#### `bcc?: Array<string>`
Optional list of bcc emails i.e: `["foo@bar.com", "bar@foo.com"]`
#### `attachmentPaths?: Array<string>`
Optional path URIs of files that exist to the filesystem in the specified path, and want to be send as attachments i.e: `[RNFS.DocumentDirectoryPath + "/sample_test.txt"]`
#### `attachmentNames?: Array<string>`
**Required if attachmentPaths are set, Only for android**
The sending attachments filenames, will be renamed by these. It's important to set these, otherwise they are not always shown in the received email i.e: `["renamed_sample_test.txt"]` or `["sample_test.txt"]` etc
### Usage with Proguard
Add the following into android/app/proguard-rules.pro
```
-dontshrink
-keep class javax.** {*;}
-keep class com.sun.** {*;}
-keep class myjava.** {*;}
-keep class org.apache.harmony.** {*;}
-dontwarn java.awt.**
-dontwarn java.beans.Beans
-dontwarn javax.security.**
-dontwarn javax.activation.**
```