Compare commits

..

8 commits

Author SHA1 Message Date
Thomas Hochstein 09d51964aa Update POD documentation (URLs).
Signed-off-by: Thomas Hochstein <thh@thh.name>
2024-05-27 01:01:08 +02:00
Thomas Hochstein 99d4cbcae2 Add README.
Signed-off-by: Thomas Hochstein <thh@thh.name>
2024-05-26 00:33:07 +02:00
Thomas Hochstein 4fe0c455ea Change mail address.
Signed-off-by: Thomas Hochstein <thh@thh.name>
2020-08-23 22:47:56 +02:00
Thomas Hochstein 15dd22593e Don't warn for missing optional encoding setting.
Signed-off-by: Thomas Hochstein <thh@inter.net>
2017-08-19 16:21:14 +02:00
Thomas Hochstein 6e49580a28 Mark yapfaq.pl executable.
Signed-off-by: Thomas Hochstein <thh@inter.net>
2017-08-19 16:10:43 +02:00
Thomas Hochstein 3b06ebf93a Add Charset setting to config file.
Fixes #29.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2017-08-19 15:52:23 +02:00
Thomas Hochstein cc74e2f92b Bump version, copyright; update URLs.
Signed-off-by: Thomas Hochstein <thh@inter.net>
2017-08-19 15:32:13 +02:00
Thomas Hochstein 04eac1b541 Fix typo in POD.
Signed-off-by: Thomas Hochstein <thh@inter.net>
2012-10-12 20:12:11 +02:00
4 changed files with 58 additions and 17 deletions

View file

@ -1,3 +1,13 @@
yapfaq 0.10 (unreleased)
* Add: Charset definition.
Fixes #29.
* Mark yapfaq.pl executable.
* Change mail address.
Version 0.9.1 Version 0.9.1
* Fix: Test mode: Add X-Supersedes only if Supersedes would be set. * Fix: Test mode: Add X-Supersedes only if Supersedes would be set.

13
README.md Normal file
View file

@ -0,0 +1,13 @@
# yapfaq
**yapfaq** can post FAQs from text files to Usenet at configurable intervals and automatically adds the necessary headers.
## Description
With **yapfaq**, FAQs or other texts can be posted regularly (every x days, weeks, months or years) to one or more newsgroups. Posting frequency as well as the necessary headers - including the format of the `Message-ID:` headers that will be generated - can be defined in a configuration file. `Expires:` and `Supersedes:` will be set automatically by the script.
The text can either be posted via NNTP or piped to another programme (like `inews` or `tinews.pl`).
## More information
Please see the [distribution page](https://th-h.de/net/software/yapfaq/) (in German).

View file

@ -34,6 +34,10 @@ NGs = 'de.test'
# This setting is optional. Default: <%n-%y-%m-%d@YOURHOST> # This setting is optional. Default: <%n-%y-%m-%d@YOURHOST>
# MID-Format = '<%n-%y-%m-%d@domain.invalid>' # MID-Format = '<%n-%y-%m-%d@domain.invalid>'
# Character Encoding
# This setting is optional. Default: UTF-8
# Charset = ISO-8859-15
# Supersede last posting? # Supersede last posting?
# This setting is optional. Default: unset # This setting is optional. Default: unset
Supersede = yes Supersede = yes

48
yapfaq.pl Normal file → Executable file
View file

@ -1,18 +1,18 @@
#! /usr/bin/perl -W #! /usr/bin/perl -W
# #
# yapfaq Version 0.91 by Thomas Hochstein # yapfaq Version 0.10 by Thomas Hochstein
# (Original author: Marc Brockschmidt) # (Original author: Marc Brockschmidt)
# #
# This script posts any project described in its config-file. Most people # This script posts any project described in its config-file. Most people
# will use it in combination with cron(8). # will use it in combination with cron(8).
# #
# Copyright (C) 2003 Marc Brockschmidt <marc@marcbrockschmidt.de> # Copyright (C) 2003 Marc Brockschmidt <marc@marcbrockschmidt.de>
# Copyright (c) 2010 Thomas Hochstein <thh@inter.net> # Copyright (c) 2010-2017 Thomas Hochstein <thh@thh.name>
# #
# It can be redistributed and/or modified under the same terms under # It can be redistributed and/or modified under the same terms under
# which Perl itself is published. # which Perl itself is published.
our $VERSION = "0.91"; our $VERSION = "0.10";
# Please do not change this setting! # Please do not change this setting!
# You may override the default .rc file (.yapfaqrc) by using "-c .rc file" # You may override the default .rc file (.yapfaqrc) by using "-c .rc file"
@ -45,7 +45,7 @@ my %Options;
getopts('Vhvpdt:f:c:s:', \%Options); getopts('Vhvpdt:f:c:s:', \%Options);
# -V: print version / copyright information # -V: print version / copyright information
if ($Options{'V'}) { if ($Options{'V'}) {
print "$0 v $VERSION\nCopyright (c) 2003 Marc Brockschmidt <marc\@marcbrockschmidt.de>\nCopyright (c) 2010 Thomas Hochstein <thh\@inter.net>\n"; print "$0 v $VERSION\nCopyright (c) 2003 Marc Brockschmidt <marc\@marcbrockschmidt.de>\nCopyright (c) 2010-2017 Thomas Hochstein <thh\@thh.name>\n";
print "This program is free software; you may redistribute it and/or modify it under the same terms as Perl itself.\n"; print "This program is free software; you may redistribute it and/or modify it under the same terms as Perl itself.\n";
exit(0); exit(0);
} }
@ -82,7 +82,7 @@ foreach (@Config) {
my ($ActName,$File,$PFreq,$Expire) =($$_{'name'},$$_{'file'},$$_{'posting-frequency'},$$_{'expires'}); my ($ActName,$File,$PFreq,$Expire) =($$_{'name'},$$_{'file'},$$_{'posting-frequency'},$$_{'expires'});
my ($From,$Subject,$NG,$Fup2)=($$_{'from'},$$_{'subject'},$$_{'ngs'},$$_{'fup2'}); my ($From,$Subject,$NG,$Fup2)=($$_{'from'},$$_{'subject'},$$_{'ngs'},$$_{'fup2'});
my ($MIDF,$ReplyTo,$ExtHea)=($$_{'mid-format'},$$_{'reply-to'},$$_{'extraheader'}); my ($MIDF,$ReplyTo,$Charset,$ExtHea)=($$_{'mid-format'},$$_{'reply-to'},$$_{'charset'},$$_{'extraheader'});
my ($Supersede) =($$_{'supersede'}); my ($Supersede) =($$_{'supersede'});
# -f: loop if not FAQ to post # -f: loop if not FAQ to post
@ -111,7 +111,7 @@ foreach (@Config) {
if($Options{'d'}) { if($Options{'d'}) {
print "$ActName: Would be posted now (but running in simulation mode [$0 -d]).\n" if $Options{'v'}; print "$ActName: Would be posted now (but running in simulation mode [$0 -d]).\n" if $Options{'v'};
} else { } else {
postfaq(\$ActName,\$File,\$From,\$Subject,\$NG,\$Fup2,\$MIDF,\$ExtHea,\$Config{'Sender'},\$TDY,\$TDM,\$TDD,\$ReplyTo,\$SupersedeMID,\$Expire); postfaq(\$ActName,\$File,\$From,\$Subject,\$NG,\$Fup2,\$MIDF,\$Charset,\$ExtHea,\$Config{'Sender'},\$TDY,\$TDM,\$TDD,\$ReplyTo,\$SupersedeMID,\$Expire);
} }
} elsif($Options{'v'}) { } elsif($Options{'v'}) {
print "$ActName: Nothing to do.\n"; print "$ActName: Nothing to do.\n";
@ -238,7 +238,7 @@ sub updatestatus {
# It reads the data-file $File and then posts the article. # It reads the data-file $File and then posts the article.
sub postfaq { sub postfaq {
my ($ActName,$File,$From,$Subject,$NG,$Fup2,$MIDF,$ExtraHeaders,$Sender,$TDY,$TDM,$TDD,$ReplyTo,$Supersedes,$Expire) = @_; my ($ActName,$File,$From,$Subject,$NG,$Fup2,$MIDF,$Charset,$ExtraHeaders,$Sender,$TDY,$TDM,$TDD,$ReplyTo,$Supersedes,$Expire) = @_;
my (@Header,@Body,$MID,$InRealBody,$LastModified); my (@Header,@Body,$MID,$InRealBody,$LastModified);
print "$$ActName: Preparing to post.\n" if($Options{'v'}); print "$$ActName: Preparing to post.\n" if($Options{'v'});
@ -295,6 +295,10 @@ sub postfaq {
$$Subject =~ s/[<\[{\(]?\%LM[>\]}\)]?//; $$Subject =~ s/[<\[{\(]?\%LM[>\]}\)]?//;
} }
# Set Charset
$$Charset = 'UTF-8' if !$$Charset;
my $ContentType = sprintf('text/plain; charset=%s',$$Charset);
# Test mode? # Test mode?
if($Options{'t'} and $Options{'t'} !~ /console/i) { if($Options{'t'} and $Options{'t'} !~ /console/i) {
$$NG = $Options{'t'}; $$NG = $Options{'t'};
@ -317,7 +321,7 @@ sub postfaq {
push @Header, "Sender: $$Sender\n" if $$Sender; push @Header, "Sender: $$Sender\n" if $$Sender;
push @Header, "Mime-Version: 1.0\n"; push @Header, "Mime-Version: 1.0\n";
push @Header, "Reply-To: $$ReplyTo\n" if $$ReplyTo; push @Header, "Reply-To: $$ReplyTo\n" if $$ReplyTo;
push @Header, "Content-Type: text/plain; charset=ISO-8859-15\n"; push @Header, "Content-Type: $ContentType\n";
push @Header, "Content-Transfer-Encoding: 8bit\n"; push @Header, "Content-Transfer-Encoding: 8bit\n";
push @Header, "User-Agent: yapfaq/$VERSION\n"; push @Header, "User-Agent: yapfaq/$VERSION\n";
if ($$ExtraHeaders) { if ($$ExtraHeaders) {
@ -521,6 +525,14 @@ host B<yapfaq> is running on. Obviously that will only work if you
have defined a reasonable hostname that the hostfqdn() function of have defined a reasonable hostname that the hostfqdn() function of
Net::Domain can return. Net::Domain can return.
=item B<Charset> = I<encoding> (optional)
The character encoding of your FAQ. This setting is optional, but
should match the encoding of your FAQ B<File>. Default is set to
I<UTF-8>.
This setting is copied verbatim to the I<Content-Type> header.
=item B<Supersede> = I<yes> (optional) =item B<Supersede> = I<yes> (optional)
Add Supersedes header to the message containing the Message-ID header Add Supersedes header to the message containing the Message-ID header
@ -572,6 +584,10 @@ This setting is optional.
# Message-ID ("%n" is $Name) # Message-ID ("%n" is $Name)
# MID-Format = '<%n-%d.%m.%y@domain.invalid>' # MID-Format = '<%n-%d.%m.%y@domain.invalid>'
# Character Encoding
# This setting is optional. Default: UTF-8
# Charset = ISO-8859-15
# Supersede last posting? # Supersede last posting?
Supersede = yes Supersede = yes
@ -831,22 +847,20 @@ the last post of that FAQ.
=head1 BUGS =head1 BUGS
Please report any bugs or feature request to the author or use the Please report any bugs or feature requests to the author or use the
bug tracker at L<http://bugs.th-h.de/>! bug tracker at L<https://code.virtcomm.de/thh/yapfaq/issues>!
=head1 SEE ALSO =head1 SEE ALSO
L<http://th-h.de/download/scripts.php> will have the current L<https://th-h.de/net/software/yapfaq/> will have the current
version of this program. version of this program.
This program is maintained using the Git version control system. You This program is maintained using the Git version control system at
may clone L<git://code.th-h.de/usenet/yapfaq.git> to check out the L<https://code.virtcomm.de/thh/yapfaq/>.
current development tree or browse it on the web via
L<http://code.th-h.de/?p=usenet/yapfaq.git>.
=head1 AUTHOR =head1 AUTHOR
Thomas Hochstein <thh@inter.net> Thomas Hochstein <thh@thh.name>
Original author (up to version 0.5b, dating from 2003): Original author (up to version 0.5b, dating from 2003):
Marc Brockschmidt <marc@marcbrockschmidt.de> Marc Brockschmidt <marc@marcbrockschmidt.de>
@ -855,7 +869,7 @@ Marc Brockschmidt <marc@marcbrockschmidt.de>
Copyright (c) 2003 Marc Brockschmidt <marc@marcbrockschmidt.de> Copyright (c) 2003 Marc Brockschmidt <marc@marcbrockschmidt.de>
Copyright (c) 2010 Thomas Hochstein <thh@inter.net> Copyright (c) 2010-2017 Thomas Hochstein <thh@thh.name>
This program is free software; you may redistribute it and/or modify it This program is free software; you may redistribute it and/or modify it
under the same terms as Perl itself. under the same terms as Perl itself.