Ciao Jokel
Der Aufruf vom Mail sieht wie folgt aus
val pfad = Environment.getExternalStorageDirectory().getAbsolutePath() + "/mialtest/"
var sm2 = SendMail(pfad + "daten.txt")
sm2.execute()
Es kommt nun folgende Fehlermeldung:
06-17 08:06:58.765 12622-12727/ch.robbisoft.mailtest W/System.err: javax.mail.SendFailedException: Sending failed;
06-17 08:06:58.765 12622-12727/ch.robbisoft.mailtest W/System.err: nested exception is:
06-17 08:06:58.765 12622-12727/ch.robbisoft.mailtest W/System.err: class javax.mail.MessagingException: Unknown SMTP host: smtpauths.bluewin.ch;
06-17 08:06:58.765 12622-12727/ch.robbisoft.mailtest W/System.err: nested exception is:
06-17 08:06:58.765 12622-12727/ch.robbisoft.mailtest W/System.err: java.net.UnknownHostException: Unable to resolve host "smtpauths.bluewin.ch": No address associated with hostname
06-17 08:06:58.765 12622-12727/ch.robbisoft.mailtest W/System.err: at javax.mail.Transport.send0(Transport.java:218)
06-17 08:06:58.765 12622-12727/ch.robbisoft.mailtest W/System.err: at javax.mail.Transport.send(Transport.java:80)
06-17 08:06:58.765 12622-12727/ch.robbisoft.mailtest W/System.err: at ch.robbisoft.mailtest.SendMail.doInBackground(SendMail.kt:73)
06-17 08:06:58.765 12622-12727/ch.robbisoft.mailtest W/System.err: at ch.robbisoft.mailtest.SendMail.doInBackground(SendMail.kt:17)
06-17 08:06:58.765 12622-12727/ch.robbisoft.mailtest W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:288)
06-17 08:06:58.765 12622-12727/ch.robbisoft.mailtest W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
06-17 08:06:58.765 12622-12727/ch.robbisoft.mailtest W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
06-17 08:06:58.765 12622-12727/ch.robbisoft.mailtest W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
06-17 08:06:58.765 12622-12727/ch.robbisoft.mailtest W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
06-17 08:06:58.765 12622-12727/ch.robbisoft.mailtest W/System.err: at java.lang.Thread.run(Thread.java:818)
06-17 08:06:58.775 12622-12727/ch.robbisoft.mailtest W/System.err: javax.mail.SendFailedException: Sending failed;
06-17 08:06:58.775 12622-12727/ch.robbisoft.mailtest W/System.err: nested exception is:
06-17 08:06:58.775 12622-12727/ch.robbisoft.mailtest W/System.err: class javax.mail.MessagingException: Unknown SMTP host: smtpauths.bluewin.ch;
06-17 08:06:58.775 12622-12727/ch.robbisoft.mailtest W/System.err: nested exception is:
06-17 08:06:58.775 12622-12727/ch.robbisoft.mailtest W/System.err: java.net.UnknownHostException: Unable to resolve host "smtpauths.bluewin.ch": No address associated with hostname
06-17 08:06:58.775 12622-12727/ch.robbisoft.mailtest W/System.err: at javax.mail.Transport.send0(Transport.java:218)
06-17 08:06:58.775 12622-12727/ch.robbisoft.mailtest W/System.err: at javax.mail.Transport.send(Transport.java:80)
06-17 08:06:58.775 12622-12727/ch.robbisoft.mailtest W/System.err: at ch.robbisoft.mailtest.SendMail.doInBackground(SendMail.kt:73)
06-17 08:06:58.775 12622-12727/ch.robbisoft.mailtest W/System.err: at ch.robbisoft.mailtest.SendMail.doInBackground(SendMail.kt:17)
06-17 08:06:58.775 12622-12727/ch.robbisoft.mailtest W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:288)
06-17 08:06:58.775 12622-12727/ch.robbisoft.mailtest W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
06-17 08:06:58.775 12622-12727/ch.robbisoft.mailtest W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
06-17 08:06:58.775 12622-12727/ch.robbisoft.mailtest W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
06-17 08:06:58.775 12622-12727/ch.robbisoft.mailtest W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
06-17 08:06:58.775 12622-12727/ch.robbisoft.mailtest W/System.err: at java.lang.Thread.run(Thread.java:818)
Den Dateityp habe ich angepasst. Ich lege noch den vollständigen Code bei. Vielleicht siehst du was.
package ch.robbisoft.mailtest
import android.Manifest
import android.content.Context
import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle
import android.os.Environment
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import kotlinx.android.synthetic.main.activity_main.*
import java.io.OutputStreamWriter
import java.lang.Exception
class MainActivity : AppCompatActivity() {
var rechte = arrayOf(
Manifest.permission.INTERNET
)
private var str_text: String? = null
private var ctx: Context? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
ctx = applicationContext
//prüft ob OS Version > 6 ist, denn vorher kann nicht geprüft werden
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { //prüfen ob Rechte vorhanden sind
if (pruefrechte()) {
btn_sendmail.setOnClickListener {
try {
val text = "Das ist ein Text von mir"
schreiben(Context.MODE_PRIVATE, text)
val pfad = Environment.getExternalStorageDirectory().getAbsolutePath() + "/mialtest/"
var sm2 = SendMail(pfad + "daten.txt")
sm2.execute()
}catch (e : Exception){
tvError.text = e.message
}
}
str_text = "neue Rechte Mail gesendet"
Toast.makeText(ctx, str_text, Toast.LENGTH_SHORT).show()
} else {
}
} else {
btn_sendmail.setOnClickListener {
try {
val text = "Das ist ein Text von mir"
schreiben(Context.MODE_PRIVATE, text)
val pfad = Environment.getExternalStorageDirectory().getAbsolutePath() + "/mialtest/"
var sm2 = SendMail(pfad + "daten.txt")
sm2.execute()
}catch (e : Exception){
tvError.text = e.message
}
}
str_text = "alte Rechte Mail gesendet"
Toast.makeText(ctx, str_text, Toast.LENGTH_SHORT).show()
}
}
private fun pruefrechte(): Boolean {
var result: Int
val listPermissionsNeeded: MutableList<String> = ArrayList<String>()
for (p in rechte) {
result = ContextCompat.checkSelfPermission(this, p)
if (result != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add((p))
}
}
if (!listPermissionsNeeded.isEmpty()) {
ActivityCompat.requestPermissions(this@MainActivity, (listPermissionsNeeded.toTypedArray() as Array<String?>, MULTIPLE_PERMISSIONS)
// keine permissions gesetzt
return false
}
// alle permissions gesetzt
return true
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
when (requestCode) {
MULTIPLE_PERMISSIONS -> {
if (grantResults.size > 0) {
var permissionsDenied = ""
for (per in permissions) {
if (grantResults[0] == PackageManager.PERMISSION_DENIED) {
permissionsDenied += "\n" + per
}
}
// Nach dem ersten Male
}
return
}
}
}
companion object {
const val MULTIPLE_PERMISSIONS = 99
}
private fun schreiben(dateimodus : Int, ausgabe : String){
val datei = openFileOutput("daten.txt", dateimodus)
val schreiber = OutputStreamWriter(datei)
schreiber.write(ausgabe)
schreiber.close()
datei.close()
}
}
und die Mailklasse
package ch.robbisoft.mailtest
import android.os.AsyncTask
import android.widget.Toast
import java.io.File
import java.util.*
import javax.activation.DataHandler
import javax.activation.DataSource
import javax.activation.FileDataSource
import javax.mail.*
import javax.mail.internet.InternetAddress
import javax.mail.internet.MimeBodyPart
import javax.mail.internet.MimeMessage
import javax.mail.internet.MimeMultipart
import javax.mail.PasswordAuthentication
class SendMail (private val attachFilePath: String) : AsyncTask() {
//Bluewin
private val EMAIL = "...@bluewin.ch" // SMTP Mail Account
private val PASSWORD = "pwd" // SMTP PW
private val SMTPHOST = "smtpauths.bluewin.ch" // SMTP Adresse
private var session: Session? = null
//Information to send email
private val email = "...@bluewin.ch" // Empfänger Adresse
private val subject = "Messdaten"
private val message = "Neue Daten"
public var errorMessage = ""
protected override fun doInBackground(vararg params: Void?): Void? {
//Creating properties
val props = Properties()
props.setProperty("mail.transport.protocol", "smtp")
props["mail.smtp.host"] = SMTPHOST
props["mail.smtp.socketFactory.port"] = "465"
props["mail.smtp.port"] = "465"
props["mail.smtp.socketFactory.class"] = "javax.net.ssl.SSLSocketFactory"
props["mail.smtp.auth"] = "true"
props["mail.smtp.socketFactory.fallback"] = "false"
props.setProperty("mail.smtp.quitwait", "false")
//Creating a new session
session = Session.getDefaultInstance(props, object : Authenticator() {
//Authenticating the password
override fun getPasswordAuthentication(): PasswordAuthentication {
return PasswordAuthentication(EMAIL, PASSWORD)
}
})
try {
if( session != null) {
//Creating MimeMessage object
val mm = MimeMessage(session)
//Setting sender address
mm.setFrom(InternetAddress(EMAIL))
mm.addRecipient(Message.RecipientType.TO, InternetAddress(email))
mm.subject = subject
val mp: Multipart = MimeMultipart()
val htmlPart = MimeBodyPart()
htmlPart.setContent(message, "text/plain")
mp.addBodyPart(htmlPart)
val attachment = MimeBodyPart()
val source: DataSource = FileDataSource(attachFilePath)
attachment.dataHandler = DataHandler(source)
attachment.fileName = File(attachFilePath).name
mp.addBodyPart(attachment)
mm.setContent(mp)
//Sending email
Transport.send(mm)
}
} catch (e: MessagingException) {
e.printStackTrace()
errorMessage = e.message.toString()
errorMessage += "\n"
errorMessage += e.printStackTrace()
}
return null
}
}
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.