diff --git a/FAQ.md b/FAQ.md
index b27f2d09d0..8d8269b942 100644
--- a/FAQ.md
+++ b/FAQ.md
@@ -377,7 +377,8 @@ You might get the alert "*Please log in via your web browser*".
This happens when Google considers the network that connects you to the internet (this could be a VPN) to to be unsafe.
This can be prevented by using an app specific password.
-See [here](https://support.google.com/mail/accounts/answer/78754) for troubleshooting.
+See [here](https://support.google.com/mail/answer/7126229) for Google's instructions
+and [here](https://support.google.com/mail/accounts/answer/78754) for troubleshooting.
See [this FAQ](#user-content-faq111) about why OAuth is not being used.
@@ -522,6 +523,8 @@ Searching messages is a pro feature.
To use Outlook or Hotmail with two factor authentication enabled, you need to create an app password.
See [here](https://support.microsoft.com/en-us/help/12409/microsoft-account-app-passwords-two-step-verification) for the details.
+See [here](https://support.office.com/en-us/article/pop-imap-and-smtp-settings-for-outlook-com-d088b986-291d-42b8-9564-9c414e2aa040) for Microsoft's instructions.
+
diff --git a/app/src/main/java/eu/faircode/email/EmailProvider.java b/app/src/main/java/eu/faircode/email/EmailProvider.java
index d42bc99956..1ccbeabe19 100644
--- a/app/src/main/java/eu/faircode/email/EmailProvider.java
+++ b/app/src/main/java/eu/faircode/email/EmailProvider.java
@@ -55,10 +55,10 @@ import java.util.concurrent.Future;
public class EmailProvider {
public String name;
- public int order;
- public int keepalive;
public String link;
+ public int order;
public String type;
+ public int keepalive;
public String imap_host;
public boolean imap_starttls;
public int imap_port;
@@ -66,8 +66,7 @@ public class EmailProvider {
public int smtp_port;
public boolean smtp_starttls;
public UserType user = UserType.EMAIL;
- public String helpUrl = null;
- public StringBuilder documentation = null; // html
+ public StringBuilder documentation; // html
enum UserType {LOCAL, EMAIL}
@@ -117,7 +116,6 @@ public class EmailProvider {
throw new IllegalAccessException(name);
} else if (eventType == XmlPullParser.END_TAG) {
if ("provider".equals(xml.getName())) {
- addSpecials(context, provider);
result.add(provider);
provider = null;
}
@@ -146,9 +144,11 @@ public class EmailProvider {
}
static EmailProvider fromDomain(Context context, String domain) throws IOException {
- EmailProvider autoconfig = fromDomainInternal(context, domain);
+ EmailProvider autoconfig = _fromDomain(context, domain);
- // Always prefer built-in profiles (ISPDB is not always correct)
+ // Always prefer built-in profiles
+ // - ISPDB is not always correct
+ // - documentation links
List providers = loadProfiles(context);
for (EmailProvider provider : providers)
if (provider.imap_host.equals(autoconfig.imap_host) ||
@@ -160,23 +160,23 @@ public class EmailProvider {
return autoconfig;
}
- private static EmailProvider fromDomainInternal(Context context, String domain) throws IOException {
+ private static EmailProvider _fromDomain(Context context, String domain) throws IOException {
try {
// Assume the provider knows best
Log.i("Provider from DNS domain=" + domain);
- return addSpecials(context, fromDNS(context, domain));
+ return fromDNS(context, domain);
} catch (Throwable ex) {
Log.w(ex);
try {
// Check ISPDB
Log.i("Provider from ISPDB domain=" + domain);
- return addSpecials(context, fromISPDB(context, domain));
+ return fromISPDB(context, domain);
} catch (Throwable ex1) {
Log.w(ex1);
try {
// Scan ports
Log.i("Provider from template domain=" + domain);
- return addSpecials(context, fromTemplate(context, domain));
+ return fromTemplate(context, domain);
} catch (Throwable ex2) {
Log.w(ex2);
throw new UnknownHostException(context.getString(R.string.title_setup_no_settings, domain));
@@ -501,20 +501,6 @@ public class EmailProvider {
provider.documentation.append("").append(title).append("");
}
- private static EmailProvider addSpecials(Context context, EmailProvider provider) {
- if ("imap.gmail.com".equals(provider.imap_host))
- provider.helpUrl = Helper.FAQ_URI + "#user-content-faq6";
-
- if (provider.imap_host.endsWith("office365.com") ||
- provider.imap_host.endsWith("live.com"))
- provider.helpUrl = Helper.FAQ_URI + "#user-content-faq14";
-
- if (provider.imap_host.endsWith("yahoo.com"))
- provider.helpUrl = Helper.FAQ_URI + "#user-content-faq88";
-
- return provider;
- }
-
private static SRVRecord lookup(Context context, String record) throws TextParseException, UnknownHostException {
Lookup lookup = new Lookup(record, Type.SRV);
diff --git a/app/src/main/java/eu/faircode/email/FragmentAccount.java b/app/src/main/java/eu/faircode/email/FragmentAccount.java
index 177dfcc105..d48e5c3b3a 100644
--- a/app/src/main/java/eu/faircode/email/FragmentAccount.java
+++ b/app/src/main/java/eu/faircode/email/FragmentAccount.java
@@ -1077,8 +1077,8 @@ public class FragmentAccount extends FragmentBase {
tvError.setVisibility(View.VISIBLE);
final EmailProvider provider = (EmailProvider) spProvider.getSelectedItem();
- if (provider != null && provider.helpUrl != null) {
- Uri uri = Uri.parse(provider.helpUrl);
+ if (provider != null && provider.link != null) {
+ Uri uri = Uri.parse(provider.link);
btnHelp.setTag(uri);
btnHelp.setVisibility(View.VISIBLE);
}
@@ -1093,7 +1093,7 @@ public class FragmentAccount extends FragmentBase {
public void run() {
if (provider != null && provider.documentation != null)
scroll.smoothScrollTo(0, tvInstructions.getBottom());
- else if (provider != null && provider.helpUrl != null)
+ else if (provider != null && provider.link != null)
scroll.smoothScrollTo(0, btnHelp.getBottom());
else
scroll.smoothScrollTo(0, tvError.getBottom());
diff --git a/app/src/main/java/eu/faircode/email/FragmentIdentity.java b/app/src/main/java/eu/faircode/email/FragmentIdentity.java
index 79a12b87da..ff148759dc 100644
--- a/app/src/main/java/eu/faircode/email/FragmentIdentity.java
+++ b/app/src/main/java/eu/faircode/email/FragmentIdentity.java
@@ -769,8 +769,8 @@ public class FragmentIdentity extends FragmentBase {
tvError.setVisibility(View.VISIBLE);
final EmailProvider provider = (EmailProvider) spProvider.getSelectedItem();
- if (provider != null && provider.helpUrl != null) {
- Uri uri = Uri.parse(provider.helpUrl);
+ if (provider != null && provider.link != null) {
+ Uri uri = Uri.parse(provider.link);
btnHelp.setTag(uri);
btnHelp.setVisibility(View.VISIBLE);
}
@@ -785,7 +785,7 @@ public class FragmentIdentity extends FragmentBase {
public void run() {
if (provider != null && provider.documentation != null)
scroll.smoothScrollTo(0, tvInstructions.getBottom());
- else if (provider != null && provider.helpUrl != null)
+ else if (provider != null && provider.link != null)
scroll.smoothScrollTo(0, btnHelp.getBottom());
else
scroll.smoothScrollTo(0, tvError.getBottom());
diff --git a/app/src/main/java/eu/faircode/email/FragmentQuickSetup.java b/app/src/main/java/eu/faircode/email/FragmentQuickSetup.java
index d0e17fa691..9ff5772c76 100644
--- a/app/src/main/java/eu/faircode/email/FragmentQuickSetup.java
+++ b/app/src/main/java/eu/faircode/email/FragmentQuickSetup.java
@@ -238,8 +238,8 @@ public class FragmentQuickSetup extends FragmentBase {
String[] dparts = email.split("@");
EmailProvider provider = EmailProvider.fromDomain(context, dparts[1]);
- if (provider.helpUrl != null)
- args.putString("help", provider.helpUrl);
+ if (provider.link != null)
+ args.putString("link", provider.link);
if (provider.documentation != null)
args.putString("documentation", provider.documentation.toString());
@@ -442,8 +442,8 @@ public class FragmentQuickSetup extends FragmentBase {
tvError.setVisibility(View.VISIBLE);
}
- if (args.containsKey("help")) {
- Uri uri = Uri.parse(args.getString("help"));
+ if (args.containsKey("link")) {
+ Uri uri = Uri.parse(args.getString("link"));
btnHelp.setTag(uri);
btnHelp.setVisibility(View.VISIBLE);
}
@@ -458,7 +458,7 @@ public class FragmentQuickSetup extends FragmentBase {
public void run() {
if (args.containsKey("documentation"))
scroll.smoothScrollTo(0, tvInstructions.getBottom());
- else if (args.containsKey("help"))
+ else if (args.containsKey("link"))
scroll.smoothScrollTo(0, btnHelp.getBottom());
else if (tvError.getVisibility() == View.VISIBLE)
scroll.smoothScrollTo(0, tvError.getBottom());
diff --git a/app/src/main/res/xml/providers.xml b/app/src/main/res/xml/providers.xml
index fc53e40595..441fcd3ae8 100644
--- a/app/src/main/res/xml/providers.xml
+++ b/app/src/main/res/xml/providers.xml
@@ -2,7 +2,7 @@
+ link="https://github.com/M66B/FairEmail/blob/master/FAQ.md#user-content-faq88">