I have tableview listed pdfs by retrieving from Firebase. No problem with retrieving datas and sending default SMTP. What I am trying to do that selected urls(pdf) in tableview, will be sent by using SMTP to user email so that user can easily reach pdf urls. I could not figure out how to handle it. This is the only critical point in my project. Any help is appreciated.
  import UIKit
  import Firebase
  import PDFKit
  import skpsmtpmessage
  class IcsViewcontroller: UIViewController , UISearchBarDelegate,SKPSMTPMessageDelegate{
  var preImage : UIImage?
  let cellSpacingHeight: CGFloat = 20
  @IBOutlet weak var searchBar: UISearchBar!
  
  @IBOutlet weak var pdfListView: UITableView!
  @IBOutlet weak var spinner: UIActivityIndicatorView!
  var pdfList = [pdfClass]()
  var searchall = [pdfClass]()
  var searching = false
  var selectedPdf = [pdfClass]()
  override func viewDidLoad() {
    super.viewDidLoad()
    
  
  
   
    let editButton = UIBarButtonItem(title: "Edit", style: .plain, target: self,           action: #selector(showEditing(_:)))
        navigationItem.rightBarButtonItem = editButton
    pdfListView.delegate = self
    pdfListView.dataSource = self
    searchBar.delegate = self
    
        self.pdfListView.isHidden = true
   
    
    getPdf()
    
   sendEmail()
  
    
    searchBar.searchTextField.backgroundColor = .white
  }
   override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    if let selectionIndexPath = self.pdfListView.indexPathForSelectedRow {
        self.pdfListView.deselectRow(at: selectionIndexPath, animated: animated)
    }
   }
  
   override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
   
   if searching {
        let destination = segue.destination as! PdfKitViewController
        let selectedIndexPath = pdfListView.indexPathForSelectedRow
        destination.pdf = searchall[selectedIndexPath!.row]
    } else {
        
        let destination = segue.destination as! PdfKitViewController
        let selectedIndexPath = pdfListView.indexPathForSelectedRow
        destination.pdf = pdfList [selectedIndexPath!.row]
       
        
      }
    
    }
   @objc func showEditing(_ sender: UIBarButtonItem)
    {
   if(self.pdfListView.isEditing == true)
   {
    
       self.pdfListView.isEditing = false
       self.navigationItem.rightBarButtonItem?.title = "Edit"
   }
   else
   {
    self.pdfListView.allowsMultipleSelectionDuringEditing = true
       self.pdfListView.isEditing = true
       self.navigationItem.rightBarButtonItem?.title = "Done"
   }
   }
  func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
    
    if searchBar.text == nil || searchBar.text == "" {
               searching = false
           } else {
               searching = true
            
           }
    
   }
   func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
    searching = false
            searchBar.text = ""
            self.pdfListView.reloadData()
   
   }
   func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
   
    searching = false
    
   }
   func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    
    
   if searchBar.text == nil || searchBar.text == "" {
        searchall = pdfList
        searching = false
        pdfListView.reloadData()
        
    } else {
        
        searching = true
    searchall =       pdfList.filter({($0.pdf_name?.lowercased().prefix(searchText.count))! ==  searchText.lowercased() })
        pdfListView.reloadData()
    }
    
    
}
func getPdf () {
    
   
    
    spinner.startAnimating()
    let docRef = Storage.storage().reference().child("ICS_Documents")
    
    docRef.listAll{ (result , error ) in
        
        if error != nil {
         
            let alert = UIAlertController(title: "Error", message: "No Database      Connection", preferredStyle: UIAlertController.Style.alert)
            alert.addAction(UIAlertAction(title: "OK", style:     UIAlertAction.Style.default, handler: nil))
            self.present(alert, animated: true, completion: nil)
            self.spinner.stopAnimating()
            
        }
    
        for item in result.items {
            
            
            let storeageLocation = String( describing : item)
            
            let gsReference = Storage.storage().reference(forURL: storeageLocation)
            
            gsReference.downloadURL{ url , error in
                
                if let error = error{
                    
                    print(error)
                } else {
                    
                    let pdf_name = String( item.name)
                    let pdf_url = url?.absoluteString
                
                   
                    let thumbnailSize = CGSize(width: 100, height: 100)
                    
       
 let thmbnail = self.generatePdfThumbnail(of: thumbnailSize,  for: url!, atPage: 0)
                
                    
    let pdfall = pdfClass(pdf_name: pdf_name, pdf_url: pdf_url!,  pdf_preview: thmbnail!)
                    
                    self.pdfList.append(pdfall)
            
                }
               
               
                
                DispatchQueue.main.async {
                    self.pdfList.sort{ $0.pdf_name ?? "" < $1.pdf_name ?? ""}
                    self.pdfListView.reloadData()
                    self.spinner.stopAnimating()
                    self.pdfListView.isHidden = false
                    
                    
                }
            }
            
        }
        
        
    }
     
    
   }
  func generatePdfThumbnail(of thumbnailSize: CGSize , for documentUrl: URL, atPage   
  pageIndex: Int) -> UIImage? {
    let pdfDocument = PDFDocument(url: documentUrl)
    let pdfDocumentPage = pdfDocument?.page(at: pageIndex)
    return pdfDocumentPage?.thumbnail(of: thumbnailSize, for:   
   PDFDisplayBox.trimBox)
    }
    func sendEmail() {
     
    
     let message = SKPSMTPMessage()
     message.relayHost = "smtp.gmail.com"
     message.login = "xxx@gmail.com"
     message.pass = "******"
     message.requiresAuth = true
     message.wantsSecure = true
     message.relayPorts = [587]
     message.fromEmail = "xxxx@gmail.com"
     message.toEmail = "xxxx@gmail.com"
     message.subject = "subject"
     
      let messagePart = [kSKPSMTPPartContentTypeKey: "text/plain; charset=UTF-8",   
      kSKPSMTPPartMessageKey: "Hi alll"]
     message.parts = [messagePart]
     message.delegate = self
     message.send()
     }
     func messageSent(_ message: SKPSMTPMessage!) {
     print("Successfully sent email!")
     }
    func messageFailed(_ message: SKPSMTPMessage!, error: Error!) {
     print("Sending email failed!")
     }
 
      }
     extension IcsViewcontroller : UITableViewDelegate,UITableViewDataSource{
   func numberOfSections(in tableView: UITableView) -> Int {
    return 1
    }
 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
      {
    
  if searching{
        return searchall.count
    }else {
    return pdfList.count
       
    }
    
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) ->   UITableViewCell {
    
     let cell = tableView.dequeueReusableCell(withIdentifier: "pdfCell", for:    indexPath) as! pdfCellTableViewCell
   
   let varcell : pdfClass
    
    if searching {
       varcell = searchall [indexPath.row]
        
    } else {
       varcell = pdfList [indexPath.row]
        
    }
        cell.configure(name: varcell.pdf_name! , pdfthumbnail:  varcell.pdf_preview!)
    cell.accessoryType = .disclosureIndicator
    return cell
    
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
   
   var indx : pdfClass
    if searching{
        indx = searchall[indexPath.row ]
        
    }else {
        indx = pdfList[indexPath.row]
    
    }
    
    self.selectdeselectcell(tableview: tableView, indexpath: indexPath)
    print("selected")
    
    if pdfListView.isEditing {
        func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) ->     Bool {
           
            return !tableView.isEditing 
        }
    }else{
    performSegue(withIdentifier: "toPdfKit", sender: indx)
    print(indexPath.row)
    }
}
    
    
    func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath)        {
        self.selectdeselectcell(tableview: tableView, indexpath: indexPath)
        print("deselected")
    }
    func selectdeselectcell(tableview : UITableView ,indexpath : IndexPath){
        if pdfListView.isEditing{
        self.selectedPdf.removeAll()
        if let arr = pdfListView.indexPathForSelectedRow{
           
           print(arr)
       }
        }else {
            return
        }
    }
    
 
   /* func tableView(_ tableView: UITableView, editActionsForRowAt indexPath:  IndexPath) -> [UITableViewRowAction]? {
    
    let deleteAction = UITableViewRowAction(style: .default, title: "Delete",   handler: { (action:UITableViewRowAction,indexPath:IndexPath)-> Void in
       
        let storage = Storage.storage()
        var childsURL : String
        if self.searching {
            
            childsURL = self.searchall[indexPath.row ].pdf_url!
        }else{
        childsURL = self.pdfList[indexPath.row].pdf_url!
        }
        let storageref = storage.reference(forURL: childsURL)
        
        storageref.delete{ error in
            if let error = error {
                print(error.localizedDescription)
                
            } else{
                print("File deleted")
                
            }
            
            
        }
        self.pdfList.removeAll()
        self.getPdf()
        
        
    })
        
    return [deleteAction]
    
    
     }*/
    }
