setConnection('pgsql') ->belongsTo(Address::class) ->withTrashed(); } public function tftn() { return $this ->setConnection('pgsql') ->belongsTo(Address::class); } /* METHODS */ /** * Return this model as a packet */ public function packet(Address $ao): Message { Log::debug(sprintf('%s:Bundling [%s]',self::LOGKEY,$this->id)); // @todo Dont bundle mail to nodes that have been disabled, or addresses that have been deleted $o = new Message; try { $o->header = [ 'onode' => $this->fftn->node_id, 'dnode' => $ao->node_id, 'onet' => $this->fftn->host_id, 'dnet' => $ao->host_id, 'flags' => 0, // @todo? 'cost' => 0, 'date'=>$this->datetime->format('d M y H:i:s'), ]; $o->tzutc = $this->datetime->utcOffset($this->tzoffset)->getOffsetString(''); $o->user_to = $this->to; $o->user_from = $this->from; $o->subject = $this->subject; // INTL kludge // @todo Point handling FMPT/TOPT $o->intl = sprintf('%s %s',$this->tftn->ftn3d,$this->fftn->ftn3d); $o->flags = $this->flags; $o->msgid = sprintf('%s %08x',$this->fftn->ftn3d,crc32($this->id)); if ($this->reply) $o->reply = $this->reply; $o->message = $this->msg; if ($this->tagline) $o->message .= $this->tagline; if ($this->tearline) $o->tearline .= $this->tearline; // VIA kludge $via = $this->via ?: collect(); $via->push( sprintf('%s @%s.UTC %s %d.%d/%s %s', $this->fftn->ftn3d, Carbon::now()->utc()->format('Ymd.His'), Setup::PRODUCT_NAME, Setup::PRODUCT_VERSION_MAJ, Setup::PRODUCT_VERSION_MIN, (new Setup)->version, Carbon::now()->format('Y-m-d'), )); $o->via = $via; } catch (\Exception $e) { Log::error(sprintf('%s:Error converting netmail [%s] to a message (%d:%s)',self::LOGKEY,$this->id,$e->getLine(),$e->getMessage())); dump($this); } return $o; } }